[erlang-questions] pg2 still busted in R13B04
Rick Pettit
rpettit@REDACTED
Wed May 26 07:03:57 CEST 2010
On Tue, May 25, 2010 3:52 pm, Evans, Matthew wrote:
> If you are feeling brave edit pg2.erl and change the
> ets:update_counter(pg2_table...) calls in join_group and leave_group as
> shown below:
>
> join_group:
> try _ = ets:update_counter(pg2_table, Member_Name_Pid, {2, +1, 1, 1})
>
> leave_group:
> try ets:update_counter(pg2_table, Member_Name_Pid, {2, -1, 0, 0}) of
>
> It's not a permanent solution, but it works:
Thanks, but for now I've decided instead to go with a different solution
(namely to recompile pg2.erl from a previous release (R11B) which has
worked reliably for years).
The new (er, old) pg2 seems to be working reliably once again.
Thanks for your help Matthew,
-Rick
> i.e:
>
> join_group(Name, Pid) ->
> Ref_Pid = {ref, Pid},
> try _ = ets:update_counter(pg2_table, Ref_Pid, {4, +1})
> catch _:_ ->
> {RPid, Ref} = do_monitor(Pid),
> true = ets:insert(pg2_table, {Ref_Pid, RPid, Ref, 1}),
> true = ets:insert(pg2_table, {{ref, Ref}, Pid})
> end,
> Member_Name_Pid = {member, Name, Pid},
> try _ = ets:update_counter(pg2_table, Member_Name_Pid, {2, +1, 1, 1})
> catch _:_ ->
> true = ets:insert(pg2_table, {Member_Name_Pid, 1}),
> _ = [ets:insert(pg2_table, {{local_member, Name, Pid}}) ||
> node(Pid) =:= node()],
> true = ets:insert(pg2_table, {{pid, Pid, Name}})
> end.
>
> leave_group(Name, Pid) ->
> Member_Name_Pid = {member, Name, Pid},
> try ets:update_counter(pg2_table, Member_Name_Pid, {2, -1, 0, 0}) of
> N ->
> if
> N =:= 0 ->
> true = ets:delete(pg2_table, {pid, Pid, Name}),
> _ = [ets:delete(pg2_table, {local_member, Name, Pid})
> ||
> node(Pid) =:= node()],
> true = ets:delete(pg2_table, Member_Name_Pid);
> true ->
> ok
> end,
> Ref_Pid = {ref, Pid},
> case ets:update_counter(pg2_table, Ref_Pid, {4, -1}) of
> 0 ->
> [{Ref_Pid,RPid,Ref,0}] = ets:lookup(pg2_table,
> Ref_Pid),
> true = ets:delete(pg2_table, {ref, Ref}),
> true = ets:delete(pg2_table, Ref_Pid),
> true = erlang:demonitor(Ref, [flush]),
> kill_monitor_proc(RPid, Pid);
> _ ->
> ok
> end
> catch _:_ ->
> ok
> end.
>
> -----Original Message-----
> From: erlang-questions@REDACTED [mailto:erlang-questions@REDACTED] On
> Behalf Of Rick Pettit
> Sent: Tuesday, May 25, 2010 4:40 PM
> To: Jesper Louis Andersen
> Cc: erlang-questions@REDACTED
> Subject: Re: [erlang-questions] pg2 still busted in R13B04
>
> On Tue, May 25, 2010 3:22 pm, Jesper Louis Andersen wrote:
>> On Tue, May 25, 2010 at 9:46 PM, Rick Pettit <rpettit@REDACTED>
>> wrote:
>>> A while ago someone had posted that pg2 appeared to be broken as of
>>> R13B03.
>>>
>>> I am doing some testing with R13B04, and am finding the same to be
>>> true.
>>
>> If you have a failing test case, then by all means make it available
>> to the Erlang developers. That way, it is many times easier to fix
>> eventual problems.
>
> I'm working on it, but in the meantime the following bug report appears to
> cover the problem I'm having:
>
> http://permalink.gmane.org/gmane.comp.lang.erlang.bugs/1838
>
> -Rick
>
>> ________________________________________________________________
>> erlang-questions (at) erlang.org mailing list.
>> See http://www.erlang.org/faq.html
>> To unsubscribe; mailto:erlang-questions-unsubscribe@REDACTED
>>
>>
>
>
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:erlang-questions-unsubscribe@REDACTED
>
>
More information about the erlang-questions
mailing list