[erlang-questions] spawn and controlling_process

Jachym Holecek freza@REDACTED
Mon Nov 3 10:30:26 CET 2014


# Gadi Srebnik 2014-11-01:
> How safe it is to use controlling_process after spawn? I am using
> additional gen_tcp:controlling_process inside the Mod:Fun itself after few
> additional commands. Is it possible that process will not be owner by then?

Yes, there's a race condition there, you need explicit synchronization to
be safe:

  start_worker(Sock) ->
      Pid = erlang:spawn(?MODULE, worker_init, [Sock]),
      gen_tcp:controlling_process(Sock, Pid),
      Pid ! proceed.

  worker_init(Sock) ->
      receive
          proceed ->
              %% Okay now we actually own it.
              worker_loop(Sock)
      after 1000 ->
          exit(things_seem_awfully_slow_today)
      end.
 
I wish there were a variant of controlling_process that would advise the
new owner automatically by sending {tcp_handover, Sock, Info} to it, the
last item being arbitrary term passed by previous owner. No idea how hard
would it be to implement.

BR,
	-- Jachym



More information about the erlang-questions mailing list