[erlang-questions] Semantics of send

Johan Montelius johanmon@REDACTED
Wed Apr 28 15:49:26 CEST 2010



>>> to_a_or_to_ab_or_to_none(A, B) ->
>>>     A ! foo,
>>>     B ! bar,
>>>     crash().

On Wed, 28 Apr 2010 14:09:38 +0200, Dmitry Belyaev <rumata-estor@REDACTED>  
wrote:

> Maybe I was too hurry to answer.
>
> http://erlang.org/doc/reference_manual/processes.html#id2279644
> Message sending is asynchronous and safe, the message is guaranteed to
> eventually reach the recipient, provided that the recipient exists.

Yes, according to the Reference Manual, messages will arrive (provided  
that A and B exists). This is probably also true if A resides on the same  
node as the sender. However If the sender does not reside on the same node  
things are not that simple.

To start with we could have a temporary network problem causing the  
message foo to be lost (it is in the senders buffer until it gives up and  
throws the message away). The first send operation (as far as I know) does  
not wait for the foo message to be acknowledged and continues with sending  
bar to B.

Another problem is if the foo message is placed in the out buffer waiting  
to be sent and bar is placed in another out buffer. What if bar is sent  
and then the sender node crashes.

Maybe the reference manual should say: Message sending is asynchronous,  
the message is guaranteed to
  eventually reach the recipient, provided that the recipient exists and  
there is no problem.

Is this the proper description of send?

   Johan



-- 
Dr Johan Montelius
Royal Institute of Technology - KTH
School of Information and Communication Technology - ICT


More information about the erlang-questions mailing list