testing asynchronous code

Jay Nelson jay@REDACTED
Wed Apr 21 21:09:09 CEST 2010


Scott wrote:

 > It's quite unusual to have a gen server send itself a message using
 > gen server:cast().  I don't know why your code would do it...

I do find it very useful during initialization.  As you said in a  
different thread, a gen_server should start quickly to avoid causing  
a supervisor timeout when it launches too many slow children.

start_link(...) ->
	{ok, Pid} = gen_server:start_link(...),
	gen_server:cast(Pid, finish_init),
	{ok, Pid}.


The keys to the technique are:

1) Make sure you cast before the Pid leaks out to any callers
2) Make sure enough of the state is initialized for finish_init to run
3) Any callers are safely in the queue after finish_init

jay



More information about the erlang-questions mailing list