diff --git a/src/etsgive_mgr.erl b/src/etsgive_mgr.erl index 2b62553..be7f812 100644 --- a/src/etsgive_mgr.erl +++ b/src/etsgive_mgr.erl @@ -83,16 +83,24 @@ handle_call(_Request, _From, State) -> %% @end %%-------------------------------------------------------------------- handle_cast({gift, Data}, State) -> - SRV = whereis(etsgive_srv), - link(SRV), TableId = ets:new(?MODULE, [private]), ets:insert(TableId, Data), ets:setopts(TableId, {heir, self(), Data}), - ets:give_away(TableId, SRV, Data), + giveaway_table(TableId, Data), {noreply, State#state{table_id=TableId}}; handle_cast(_Msg, State) -> {noreply, State}. +giveaway_table(TableId, Data) -> + try + SRV = wait_for_srv(), + link(SRV), + ets:give_away(TableId, SRV, Data) + catch K:V -> + io:format("Problem giving ets table away ~p ~p", [K, V]), + giveaway_table(TableId, Data) + end. + %%-------------------------------------------------------------------- %% @private %% @doc @@ -108,11 +116,9 @@ handle_info({'EXIT',Pid,killed}, State) -> io:format("SRV(~p) !! is now dead, farewell TableId: ~p~n", [Pid, TableId]), {noreply, State}; handle_info({'ETS-TRANSFER', TableId, Pid, Data}, State) -> - SRV = wait_for_srv(), io:format("Warning TableId: ~p OwnerPid: ~p is dying~n" "SRV(~p) => MGR(~p) handing TableId: ~p~n", [TableId, Pid, Pid, self(), TableId]), - link(SRV), - ets:give_away(TableId, SRV, Data), + giveaway_table(TableId, Data), {noreply, State#state{table_id=TableId}}. wait_for_srv() ->