[erlang-questions] Restarting processes

Daniel Ginsburg dg@REDACTED
Fri Mar 30 13:00:51 CEST 2007

Mats Cronqvist пишет:
> Daniel Ginsburg wrote:
>> Mats Cronqvist пишет:
>>>   i can see two easy ways to do this.
>>>   in either case the workers should monitor the demux.
>>>   * the workers poll on the demux registered name.
>> You mean, calling whereis(demux_name) is a cycle? Well, if other
>> approaches won't work, I think I'll do just that.
>   i'm not sure what you mean by "cycle". but something like (pseudo-code)
> assert_demux() ->
>   case whereis(demux_name) of
>     undefined -> receive after 1000 -> assert_demux() end;
>     Pid -> Pid
>   end.

Yes, that's what I meant.

>>>   * the demux has an ets table with all worker pids, and notify them at
>>> startup.
>> I might be confused about how ets works, but if demux has an ets table
>> and terminates, the table will vanish along with it's owner, won't it?
>   yes, the demux supervisor should own the table.

You mean create ets table in supervisor's init and pass it as argument
to started process in childspec? Neat. I haven't thought about that and
always created my ets tables in my gen_servers' init callback.

>   btw, ulf's "proc" thing is a, quite clever, generalization of this.
> unless you use it, you'll probably end up reinventing it.

Yeah, I'm playing with proc right now and I quite like it. I think I'll
use it.


More information about the erlang-questions mailing list