105
114
process_flag(trap_exit, true),
106
115
DB=ets:new(gs_names,[set,public]),
107
116
loop(#state{db=DB,self=self()}).
112
% io:format("frontend received: ~p~n",[X]),
121
% io:format("frontend received: ~p~n",[X]),
113
122
case catch (doit(X,State)) of
114
123
done -> loop(State);
115
124
NewState when record(NewState,state) ->
156
165
if NameOccupied == true ->
157
166
reply(FromOwner, {error,{name_occupied,Name}});
159
168
case idOrName_to_id(DB,Parent,FromOwner) of
161
170
reply(FromOwner, {error,{no_such_parent,Parent}});
163
172
{Id,NewState} = inc(ParentObj,State),
164
173
case gstk:create(backend(State,ParentObj),
165
{FromOwner,{Objtype,Id,ParentObj,Opts}}) of
174
{FromOwner,{Objtype,Id,ParentObj,Opts}}) of
168
177
if Name == undefined ->
169
178
ets:insert(DB,{Id,lives}),
170
179
reply(FromOwner, Id),
172
true -> % it's a real name, register it
181
true -> % it's a real name, register it
173
182
NamePid = {Name,FromOwner},
174
183
ets:insert(DB,{NamePid,Id}),
175
184
ets:insert(DB,{Id,NamePid}),
292
301
terminate(_Reason,#state{db=DB}) ->
293
302
if DB==undefined -> ok;
295
% io:format("frontend db:~p~n",[ets:tab2list(DB)])
304
% io:format("frontend db:~p~n",[ets:tab2list(DB)])
337
346
remove_objs(DB,Objs);
338
347
remove_objs(_DB,[]) -> done.
340
349
idOrName_to_id(DB,IdOrName,Pid) when atom(IdOrName) ->
341
350
case ets:lookup(DB,{IdOrName,Pid}) of
342
351
[{_,Obj}] -> Obj;