[erlang-questions] Match Made In Heaven: proc_lib:spawnlink(Node, M, F, A) & gen_server:call({global, ?SERVER}, a marriage?

db masterofquestions@REDACTED
Tue Apr 22 05:01:18 CEST 2008


If anyone of OTP's gen_* spawns a process on a remote machine using
proc_lib:spawn_link(Node, M, F, A), and supervisor terminates the
gen_*, then do I have to explicitly catch the termination signal  from
the gen_*  within the process spawned by the proc_lib:spawn_link(Node,
M, F, A) like so?

receive
        ...
         {'EXIT', Parent, Reason} ->
             ..maybe some cleaning up here..
             exit(Reason);
         ...
     end.

Or does a remotely spawned proc_lib process also get terminated by
OTP's gen_* whenever supervisor terminates any one of the OTP's gen_*?

On Mon, Apr 21, 2008 at 7:27 PM, db <masterofquestions@REDACTED> wrote:
> I have a global gen_server on nodeA and the clients are spawned on
>  remote nodes(B,C,...) from nodeA by a another gen_server. Common
>  supervisor that supervise both gen_server for client and global
>  gen_server on NodeA.
>
>  nodeA
>     |-supervisor
>           |-global_gen_server
>           |-client_gen_server (this gen_server uses
>  proc_lib:spawn_link(Node, M, F, A) to spawn clients on remote nodes
>  and respawn client onto remote nodes if they die).
>
>  If the supervisor on nodeA sends terminate signal to global_gen_server
>  and client_gen_server, I need the remote clients to also die.
>
>  I use proc_lib to spawn the client on remote node.
>  Proc_lib:spawn_link(Node, M, F, A) has looping structure as follows:
>
>  loop(...) ->
>     receive
>         ...
>
>         {'EXIT', Parent, Reason} ->
>             ..maybe some cleaning up here..
>             exit(Reason);
>         ...
>     end.
>
>  How can I call gen_server:call({global, ?SERVER} inside this loop, so
>  that the reply from the gen_server hits one of the receive condition.
>  Is proc_lib:spawn_link and gen_server:call({global, ?SERVER} a match
>  made in heaven or I have to go with proc_lib:spawn_link and
>  gen_server:cast({global, ?SERVER}?
>
>  Thank you.
>  --
>  rk
>
>  That which we persist in doing becomes easier for us to do; not that
>  the nature of the thing itself is changed, but that our power to do is
>  increased.
>  -Ralph Waldo Emerson
>



-- 
rk

That which we persist in doing becomes easier for us to do; not that
the nature of the thing itself is changed, but that our power to do is
increased.
-Ralph Waldo Emerson



More information about the erlang-questions mailing list