[erlang-questions] Passing a digraph between processes on the same node

Steve Vinoski vinoski@REDACTED
Wed Jun 10 02:55:53 CEST 2015


On Tue, Jun 9, 2015 at 7:55 PM, Steve Davis <steven.charles.davis@REDACTED>
wrote:

> Hi,
>
> Somehow I’m not seeing why the following fails:
>
> -module(gtest).
>
> -export([test/0]).
>
> test() ->
>                 Test = self(),
>                 spawn(fun() -> graph(Test) end),
>                 receive
>                 {ok, G} ->
>                                 digraph:vertices(G)
>                 after 5000 ->
>                                 timeout
>                 end.
>
> graph(Pid) ->
>                 G = digraph:new(),
>                 digraph:add_vertex(G),
>                 Pid ! {ok, G}.
>
> …since the backing ets table is “protected" by default, shouldn’t the
> calling process be able to read the values set by the process that builds
> the digraph?
>

The process running graph/1 is the owner of the ets tables. It dies as soon
as the graph/1 function completes and it takes the ets tables down with it.

Add two calls to ets:i/0, one right after receiving {ok,G} and the other
right after the digraph:new/0 call, then run gtest:test/0 from the shell
and you'll see that the digraph-related ets tables disappear by the time
the receive handles the message.

--steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150609/f2e2b447/attachment.htm>


More information about the erlang-questions mailing list