[erlang-questions] can flush the shell but can't receive from it

arif@REDACTED arif@REDACTED
Mon Nov 17 22:38:06 CET 2014


Hi,

I have the simplest of applications that consists of just the skeleton 
gen_server, registered locally as "server", with one callback 
implemented:

   handle_info({From, A, B}, State) ->
     From ! {self(), A + B},
     {noreply, State};

i.e. a simple adder

The supervisor is the skeleton one_for_one supervisor. The application, 
app, the skeleton application.

Here is what I do:

7> application:start(app).
ok
8> server ! {self(), 1, 2}.
{<0.32.0>,1,2}
9> receive X -> X end.
{<0.62.0>,3}
10> server ! {self(), a, b}.

=ERROR REPORT==== 17-Nov-2014::22:18:42 ===
** Generic server server terminating
** Last message in was {<0.32.0>,a,b}
** When Server state == {state}
** Reason for termination ==
** {badarith,[{server,handle_info,2,[{file,"server.erl"},{line,98}]},
               
{gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,599}]},
               {proc_lib,init_p_do_apply,3,
                         [{file,"proc_lib.erl"},{line,239}]}]}
{<0.32.0>,a,b}
11> server ! {self(), 3, 4}.
{<0.32.0>,3,4}
12> receive X -> X end.

and here the shell blocks.
The message ({<0.67.0>,7}) is in the shell's mailbox alright. I can see 
it by running observer.

If, instead of receive X -> X end, I do a flush(), the message _is_ 
flushed.

It is reproducible on R 17, R15B01, on linux and on windows.

What am I doing wrong?

Thanks and best regards
Arif






More information about the erlang-questions mailing list