diff options
| author | Marcus Arendt <[email protected]> | 2014-09-25 12:26:04 +0200 | 
|---|---|---|
| committer | Marcus Arendt <[email protected]> | 2014-09-25 12:26:04 +0200 | 
| commit | a686ba1fd59fba3448e09cf6e33ca093f0a490ff (patch) | |
| tree | 533ae15520b495512ad2dc45043c17ac26544e76 | |
| parent | eab2eb98148c2f8e1f3e25918ce588e1211b5c6f (diff) | |
| parent | 97cdb49fdf1c348bd9910fcc9c06732876cf200b (diff) | |
| download | otp-a686ba1fd59fba3448e09cf6e33ca093f0a490ff.tar.gz otp-a686ba1fd59fba3448e09cf6e33ca093f0a490ff.tar.bz2 otp-a686ba1fd59fba3448e09cf6e33ca093f0a490ff.zip | |
Merge branch 'maint'
Conflicts:
	lib/stdlib/src/gen_event.erl
| -rw-r--r-- | lib/stdlib/src/gen_event.erl | 44 | 
1 files changed, 24 insertions, 20 deletions
| diff --git a/lib/stdlib/src/gen_event.erl b/lib/stdlib/src/gen_event.erl index 934b112f6f..ad9322cde3 100644 --- a/lib/stdlib/src/gen_event.erl +++ b/lib/stdlib/src/gen_event.erl @@ -49,8 +49,6 @@  -import(error_logger, [error_msg/2]). --define(reply(X), From ! {element(2,Tag), X}). -  -record(handler, {module             :: atom(),  		  id = false,  		  state, @@ -261,46 +259,49 @@ handle_msg(Msg, Parent, ServerName, MSL, Debug) ->  	{notify, Event} ->  	    {Hib,MSL1} = server_notify(Event, handle_event, MSL, ServerName),  	    loop(Parent, ServerName, MSL1, Debug, Hib); -	{From, Tag, {sync_notify, Event}} -> +	{_From, Tag, {sync_notify, Event}} ->  	    {Hib, MSL1} = server_notify(Event, handle_event, MSL, ServerName), -	    ?reply(ok), +	    reply(Tag, ok),  	    loop(Parent, ServerName, MSL1, Debug, Hib);  	{'EXIT', From, Reason} ->  	    MSL1 = handle_exit(From, Reason, MSL, ServerName),  	    loop(Parent, ServerName, MSL1, Debug, false); -	{From, Tag, {call, Handler, Query}} -> +	{_From, Tag, {call, Handler, Query}} ->  	    {Hib, Reply, MSL1} = server_call(Handler, Query, MSL, ServerName), -	    ?reply(Reply), +	    reply(Tag, Reply),  	    loop(Parent, ServerName, MSL1, Debug, Hib); -	{From, Tag, {add_handler, Handler, Args}} -> +	{_From, Tag, {add_handler, Handler, Args}} ->  	    {Hib, Reply, MSL1} = server_add_handler(Handler, Args, MSL), -	    ?reply(Reply), +	    reply(Tag, Reply),  	    loop(Parent, ServerName, MSL1, Debug, Hib); -	{From, Tag, {add_sup_handler, Handler, Args, SupP}} -> +	{_From, Tag, {add_sup_handler, Handler, Args, SupP}} ->  	    {Hib, Reply, MSL1} = server_add_sup_handler(Handler, Args, MSL, SupP), -	    ?reply(Reply), +	    reply(Tag, Reply),  	    loop(Parent, ServerName, MSL1, Debug, Hib); -	{From, Tag, {delete_handler, Handler, Args}} -> +	{_From, Tag, {delete_handler, Handler, Args}} ->  	    {Reply, MSL1} = server_delete_handler(Handler, Args, MSL,  						  ServerName), -	    ?reply(Reply), +	    reply(Tag, Reply),  	    loop(Parent, ServerName, MSL1, Debug, false); -	{From, Tag, {swap_handler, Handler1, Args1, Handler2, Args2}} -> +	{_From, Tag, {swap_handler, Handler1, Args1, Handler2, Args2}} ->  	    {Hib, Reply, MSL1} = server_swap_handler(Handler1, Args1, Handler2,  						     Args2, MSL, ServerName), -	    ?reply(Reply), +	    reply(Tag, Reply),  	    loop(Parent, ServerName, MSL1, Debug, Hib); -	{From, Tag, {swap_sup_handler, Handler1, Args1, Handler2, Args2, +	{_From, Tag, {swap_sup_handler, Handler1, Args1, Handler2, Args2,  		     Sup}} ->  	    {Hib, Reply, MSL1} = server_swap_handler(Handler1, Args1, Handler2,  						Args2, MSL, Sup, ServerName), -	    ?reply(Reply), +	    reply(Tag, Reply),  	    loop(Parent, ServerName, MSL1, Debug, Hib); -	{From, Tag, which_handlers} -> -	    ?reply(the_handlers(MSL)), +	{_From, Tag, stop} -> +	    catch terminate_server(normal, Parent, MSL, ServerName), +	    reply(Tag, ok); +	{_From, Tag, which_handlers} -> +	    reply(Tag, the_handlers(MSL)),  	    loop(Parent, ServerName, MSL, Debug, false); -	{From, Tag, get_modules} -> -	    ?reply(get_modules(MSL)), +	{_From, Tag, get_modules} -> +	    reply(Tag, get_modules(MSL)),  	    loop(Parent, ServerName, MSL, Debug, false);  	Other  ->  	    {Hib, MSL1} = server_notify(Other, handle_info, MSL, ServerName), @@ -312,6 +313,9 @@ terminate_server(Reason, Parent, MSL, ServerName) ->      do_unlink(Parent, MSL),      exit(Reason). +reply({From, Ref}, Msg) -> +    From ! {Ref, Msg}. +  %% unlink the supervisor process of all supervised handlers.  %% We do not want a handler supervisor to EXIT due to the  %% termination of the event manager (server). | 
