erlang:monitor и сообщение 'DOWN'

При внимательном изучении файла gproc_tests.erl проекта "gproc". Я нашел следующий код. Сообщение «до свидания» отправляется перед «erlang:monitor/2», я думаю, что возможно, что сообщение «DOWN» не будет получено. Это правильно? Если да, то две линии нужно поменять местами, верно?

t_simple_aggr_counter() ->
    ?assert(gproc:reg({c,l,c1}, 3) =:= true),
    ?assert(gproc:reg({a,l,c1}) =:= true),
    ?assert(gproc:get_value({a,l,c1}) =:= 3),
    P = self(),
    P1 = spawn_link(fun() ->
                gproc:reg({c,l,c1}, 5),
                P ! {self(), ok},
                receive
                {P, goodbye} -> ok
                end
            end),
    receive {P1, ok} -> ok end,
    ?assert(gproc:get_value({a,l,c1}) =:= 8),
    ?assert(gproc:update_counter({c,l,c1}, 4) =:= 7),
    ?assert(gproc:get_value({a,l,c1}) =:= 12),
    P1 ! {self(), goodbye},  %<<===========This line
    R = erlang:monitor(process, P1), %<<======This line
    receive {'DOWN', R, _, _, _} ->
        gproc:audit_process(P1)
    end,
    ?assert(gproc:get_value({a,l,c1}) =:= 7).
5
задан Chen Yu 6 March 2012 в 14:48
поделиться