Handle callback replies to handle_msg correctly
This commit is contained in:
parent
f213e8a037
commit
d953858c4c
28
src/gm.erl
28
src/gm.erl
|
|
@ -1287,16 +1287,30 @@ send_right(Right, View, Msg) ->
|
||||||
ok = gen_server2:cast(get_pid(Right), {?TAG, view_version(View), Msg}).
|
ok = gen_server2:cast(get_pid(Right), {?TAG, view_version(View), Msg}).
|
||||||
|
|
||||||
callback(Args, Module, Activity) ->
|
callback(Args, Module, Activity) ->
|
||||||
|
Result =
|
||||||
lists:foldl(
|
lists:foldl(
|
||||||
fun ({Id, Pubs, _Acks}, ok) ->
|
fun ({Id, Pubs, _Acks}, {Args1, Module1, ok}) ->
|
||||||
lists:foldl(fun ({_PubNum, Pub}, ok) ->
|
lists:foldl(fun ({_PubNum, Pub}, Acc = {Args2, Module2, ok}) ->
|
||||||
Module:handle_msg(Args, get_pid(Id), Pub);
|
case Module2:handle_msg(
|
||||||
(_, Error) ->
|
Args2, get_pid(Id), Pub) of
|
||||||
|
ok ->
|
||||||
|
Acc;
|
||||||
|
{become, Module3, Args3} ->
|
||||||
|
{Args3, Module3, ok};
|
||||||
|
{stop, _Reason} = Error ->
|
||||||
Error
|
Error
|
||||||
end, ok, Pubs);
|
end;
|
||||||
(_, Error) ->
|
(_, Error = {stop, _Reason}) ->
|
||||||
Error
|
Error
|
||||||
end, ok, Activity).
|
end, {Args1, Module1, ok}, Pubs);
|
||||||
|
(_, Error = {stop, _Reason}) ->
|
||||||
|
Error
|
||||||
|
end, {Args, Module, ok}, Activity),
|
||||||
|
case Result of
|
||||||
|
{Args, Module, ok} -> ok;
|
||||||
|
{Args1, Module1, ok} -> {become, Module1, Args1};
|
||||||
|
{stop, _Reason} = Error -> Error
|
||||||
|
end.
|
||||||
|
|
||||||
callback_view_changed(Args, Module, OldView, NewView) ->
|
callback_view_changed(Args, Module, OldView, NewView) ->
|
||||||
OldMembers = all_known_members(OldView),
|
OldMembers = all_known_members(OldView),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue