ensure_started

Chris Pressey <>
Sun Mar 23 20:55:22 CET 2003


On Fri, 21 Mar 2003 16:22:12 +0100 (MET)
Peter H|gfeldt <> wrote:

> On Feb 1, 1997 I wrote the following, addressed to the OTP developing
> team. I think it is still valid. 
> [...]
>         Put the register/2 part in the Module:init function, so that
>         the newly created process fails (and terminates if properly
>         programmed) if the name is already registered. Then there 
>         will be at most one process doing 'the thing'.

Wow, six years...

This got me thinking.  Although this may sound a bit harsh - isn't
register/2 perhaps a design flaw?  If it were register/1, and always
applied to self(), it would force you code process registration this way,
by the newly created process.

Is there ever a truly convincing reason to register a process that isn't
self()?

> [...]
> Concurrency is more difficult than you believe."

I believe it :)

I was wondering if there's a similar case when a process dies.  Is there a
way to absolutely ensure that a process'es mailbox is empty before it
dies?  Especially if more than one process is sending messages to the
process.  Example:

  server() ->
    receive
      {Pid, Data} ->
        Reply = do_stuff(Data),
        Pid ! Reply,
        server();
      shut_yourself_down ->
        % --> mightn't we get another message right here?
        % --> if we do, the sender will never get a reply
        exit(was_shut_down)
    end.

-Chris



More information about the erlang-questions mailing list