[erlang-questions] question on 'EXIT' messages delivered to exit-trapping gen_servers

Adam Kocoloski adam.kocoloski@REDACTED
Fri Apr 3 01:06:58 CEST 2009

Hi Erlangers, I've been doing a little hacking on CouchDB and running  
into some behavior that I don't understand.  We have a standalone  
gen_server (let's call it A) that traps exits and was started by  
another gen_server (B) using start_link.  B does not trap exits, and  
is linked to some other process C.  Now we have the following sequence  
of events:

* exit(C, kill)
* B exits immediately with Reason killed
* A calls terminate with Reason killed

That last line surprised me.  I was expecting to receive {'EXIT', B,  
killed} in A's mailbox, and in fact I had written a handle_info to  
process all 'EXIT' messages, but none arrived.  I checked that  
trap_exit is still true in A's terminate.  {trap_exit, true} clearly  
has some effect, as without it terminate isn't even called.

I tried changing the exit signal to some other atom, but I still get  
the same basic results (just with goodbye_cruel_world instead of kill/ 
killed in the Reasons).  I'm stumped.  Regards, Adam

More information about the erlang-questions mailing list