[erlang-questions] Message order and exit(Reason)

Richard Carlsson carlsson.richard@REDACTED
Mon Jan 28 10:58:32 CET 2013


The only place I seem to find this actually described is in the old 
(never finished) Standard Erlang Specification Draft by Barklund and 
Virding. In brief, Thomas is right: with regards to propagation and 
order, exit messages are handled like regular messages. In fact, both 
are instances of what the spec calls Signals, and the ordering 
guarantees are valid for all Signals, not just messages. The spec lists 
the following signals:

   Messages
   Exit signals
   Link requests
   Unlink requests
   Group leader request
   Info request
   Suspend/resume request
   Trace/notrace request

since the spec is quite old, it is possible that there are now other 
examples of signals in the system, or that some of the above are 
obsolete. But the ordering guarantees means that the following code will 
work as expected:

      link(PidA),
      PidA ! 'msg',
      exit(reason).

that is, the link will be set up before 'msg' arrives, and the exit 
signal will arrive after the message.

     /Richard

On 2013-01-28 10:24 , Thomas Lindgren wrote:
>
> Hi Dmitrii,
>
> I think the following means that if A sends M1, M2 to B, then B will
> receive M1, M2 in the order of sending. It's not explicitly stated that
> exit messages are handled the same way as regular messages, though I
> think the default assumption should be that they are. Those here who
> have worked on model checking and whatnot, feel free to expound.
>
>
>       10.8  Is the order of message reception guaranteed?
>
> Yes, but only within one process.
> If there is a live process and you send it message A and then message B,
> it's guaranteed that if message B arrived, message A arrived before it.
> On the other hand, imagine processes P, Q and R. P sends message A to Q,
> and then message B to R. There is no guarantee that A arrives before B.
> (Distributed Erlang would have a pretty tough time if this was required!)
>
> http://www.erlang.org/faq/academic.html
>
> Best,
> Thomas
>
>     ------------------------------------------------------------------------
>     *From:* Dmitrii Dimandt <dmitrii@REDACTED>
>     *To:* Erlang Questions <erlang-questions@REDACTED>
>     *Sent:* Monday, January 28, 2013 10:00 AM
>     *Subject:* [erlang-questions] Message order and exit(Reason)
>
>     Hi all,
>
>     We've had a semi-heated discussion in Russian community over this
>     question: http://stackoverflow.com/questions/14556109/race-condition-between-trap-exit-exit-msg-and-common-msg
>
>     The question is as following: Assume we have processes A and B which
>     are linked. Process's A flag trap_exit is set to true. Let B process
>     send a msg to A and then exit:
>
>     PidA ! 'msg',
>     exit(reason).
>
>     What I wanna know if we can be shure that the process A will receive
>     'msg' and only after It {'EXIT', Pid, reason} will come ? Can
>     we predict the ordering of msgs? I can't found any proofs in
>     documentation, but I guess that it will work that way, but I need
>     some proofs. Don't want to have race condition here.
>
>
>     Can anyone with the intimate knowledge of Erlang internals shed some
>     light on this?
>
>     Thanks!
>
>     _______________________________________________
>     erlang-questions mailing list
>     erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>     http://erlang.org/mailman/listinfo/erlang-questions
>
>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>




More information about the erlang-questions mailing list