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

db <>
Tue Apr 22 01:27:07 CEST 2008


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



More information about the erlang-questions mailing list