[erlang-questions] pattern matching registered name

Bob Ippolito bob@REDACTED
Mon May 20 21:55:35 CEST 2013


This strategy is also used by OTP in gen.erl (the plumbing for gen_server,
gen_fsm, gen_event, …).
https://github.com/erlang/otp/blob/maint/lib/stdlib/src/gen.erl#L152



On Mon, May 20, 2013 at 12:34 PM, James Aimonetti <james@REDACTED> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 05/20/2013 11:47 AM, Edmund Sumbar wrote:
> > On Mon, May 20, 2013 at 11:47 AM, James Aimonetti
> > <james@REDACTED> wrote:
> >
> >> rpc/2 expects the first arg into the function to be the first
> >> element in the response tuple. The loop/0 uses self(), which
> >> always returns a pid(), not the registered name. So you call rpc
> >> with an atom, and receive a tuple with a pid(). Those don't
> >> match. Your call to rpc/2 hangs because the selective receive in
> >> rpc/2 never matches (and you have no timeout clause).
> >>
> >
> > What's confusing is that the atom apparently resolves into a pid()
> > in the send expression of kvsx:rpc/2 (adding io:format("reg name =
> > ~p~n", [whereis(abc)]) to the function returns the pid()), but not
> > in the pattern tuple of the receive expression.
> >
> > Anyway, thanks for the replies James and Yogish.
> >
> > Ed
> >
> >
> >
> > _______________________________________________ erlang-questions
> > mailing list erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> >
>
> You could change rpc/2:
>
> rpc(Name, Q) when is_atom(Name) ->
>   rpc(whereis(Name), Q);
> rpc(Pid, Q) when is_pid(Pid) ->
>   Pid ! {self(), Q},
>   receive
>     {Pid, Reply} ->
>       Reply
>   end.
>
> This will crash the caller if Name isn't registered, FYI.
>
> - --
> James Aimonetti
> Distributed Systems Engineer / DJ MC_
>
> 2600hz | http://2600hz.com
> sip:james@REDACTED
> tel: 415.886.7905
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
>
> iQEcBAEBAgAGBQJRmnrcAAoJENc77s1OYoGgF1EH/Ajv0qTcrUEK+NL4kNJ7w8rQ
> G6hdnnpm6231XA6h9MbmW0jph5nYdAo5PBeF0QBK3XyuVOUw1AvZv8PcqTTHmsKc
> K0RbZFip7mfNWXFa3wPufg1K7cZ8F5yG4k5BB+PpHSRfnh+UVs7z+qVNeXKXBWp2
> OClbohj6BqzuRR8udb+k73Bz1uwsIqDDWTSEtBpJ4YQJwSmTBjlHKIJ6wnEi5yl3
> VXFdM+/KKBN0coO3TOWOvTt4soN2AqLKSKL7XfNs91FyJvAL/nJ1YderAY2Q9MY8
> MZCLxF/Nsjjm4OxlabTEyMP/wnKwmNNvKmjx7Adx0ve+SoZbjayD32zl5goIQU8=
> =IwqX
> -----END PGP SIGNATURE-----
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20130520/b92917fe/attachment.htm>


More information about the erlang-questions mailing list