<div dir="ltr">This strategy is also used by OTP in gen.erl (the plumbing for gen_server, gen_fsm, gen_event, …). <div><a href="https://github.com/erlang/otp/blob/maint/lib/stdlib/src/gen.erl#L152">https://github.com/erlang/otp/blob/maint/lib/stdlib/src/gen.erl#L152</a><div>
<br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, May 20, 2013 at 12:34 PM, James Aimonetti <span dir="ltr"><<a href="mailto:james@2600hz.com" target="_blank">james@2600hz.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<br>
</div><div><div class="h5">On 05/20/2013 11:47 AM, Edmund Sumbar wrote:<br>
> On Mon, May 20, 2013 at 11:47 AM, James Aimonetti<br>
> <<a href="mailto:james@2600hz.com">james@2600hz.com</a>> wrote:<br>
><br>
>> rpc/2 expects the first arg into the function to be the first<br>
>> element in the response tuple. The loop/0 uses self(), which<br>
>> always returns a pid(), not the registered name. So you call rpc<br>
>> with an atom, and receive a tuple with a pid(). Those don't<br>
>> match. Your call to rpc/2 hangs because the selective receive in<br>
>> rpc/2 never matches (and you have no timeout clause).<br>
>><br>
><br>
> What's confusing is that the atom apparently resolves into a pid()<br>
> in the send expression of kvsx:rpc/2 (adding io:format("reg name =<br>
> ~p~n", [whereis(abc)]) to the function returns the pid()), but not<br>
> in the pattern tuple of the receive expression.<br>
><br>
> Anyway, thanks for the replies James and Yogish.<br>
><br>
> Ed<br>
><br>
><br>
><br>
</div></div><div class="im">> _______________________________________________ erlang-questions<br>
> mailing list <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
><br>
<br>
</div>You could change rpc/2:<br>
<br>
rpc(Name, Q) when is_atom(Name) -><br>
  rpc(whereis(Name), Q);<br>
rpc(Pid, Q) when is_pid(Pid) -><br>
<div class="im">  Pid ! {self(), Q},<br>
  receive<br>
    {Pid, Reply} -><br>
      Reply<br>
  end.<br>
<br>
</div>This will crash the caller if Name isn't registered, FYI.<br>
<div class="im"><br>
- --<br>
James Aimonetti<br>
Distributed Systems Engineer / DJ MC_<br>
<br>
2600hz | <a href="http://2600hz.com" target="_blank">http://2600hz.com</a><br>
<a href="mailto:sip%3Ajames@2600hz.com">sip:james@2600hz.com</a><br>
tel: <a href="tel:415.886.7905" value="+14158867905">415.886.7905</a><br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1.4.11 (GNU/Linux)<br>
Comment: Using GnuPG with Thunderbird - <a href="http://www.enigmail.net/" target="_blank">http://www.enigmail.net/</a><br>
<br>
</div>iQEcBAEBAgAGBQJRmnrcAAoJENc77s1OYoGgF1EH/Ajv0qTcrUEK+NL4kNJ7w8rQ<br>
G6hdnnpm6231XA6h9MbmW0jph5nYdAo5PBeF0QBK3XyuVOUw1AvZv8PcqTTHmsKc<br>
K0RbZFip7mfNWXFa3wPufg1K7cZ8F5yG4k5BB+PpHSRfnh+UVs7z+qVNeXKXBWp2<br>
OClbohj6BqzuRR8udb+k73Bz1uwsIqDDWTSEtBpJ4YQJwSmTBjlHKIJ6wnEi5yl3<br>
VXFdM+/KKBN0coO3TOWOvTt4soN2AqLKSKL7XfNs91FyJvAL/nJ1YderAY2Q9MY8<br>
MZCLxF/Nsjjm4OxlabTEyMP/wnKwmNNvKmjx7Adx0ve+SoZbjayD32zl5goIQU8=<br>
=IwqX<br>
<div class="HOEnZb"><div class="h5">-----END PGP SIGNATURE-----<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div>