@@ -82,7 +82,6 @@ defmodule GenEvent do
8282
8383 - `{:ok, new_state}`
8484 - `{:ok, new_state, :hibernate}`
85- - `{:swap_handler, args1, new_state, handler2, args2}`
8685 - `:remove_handler`
8786
8887 * `handle_call(msg, state)` - invoked when a `call/3` is done to a specific
@@ -92,7 +91,6 @@ defmodule GenEvent do
9291
9392 - `{:ok, reply, new_state}`
9493 - `{:ok, reply, new_state, :hibernate}`
95- - `{:swap_handler, reply, args1, new_state, handler2, args2}`
9694 - `{:remove_handler, reply}`
9795
9896 * `handle_info(msg, state)` - invoked to handle all other messages which
@@ -603,15 +601,19 @@ defmodule GenEvent do
603601 reply ( tag , reply )
604602 loop ( parent , name , handlers , debug , hib )
605603 { _from , tag , { :add_handler , handler , args } } ->
606- { hib , reply , handlers } = server_add_handler ( handler , args , handlers )
604+ { hib , reply , handlers } = server_add_handler ( handler , args , handlers , nil )
607605 reply ( tag , reply )
608606 loop ( parent , name , handlers , debug , hib )
609- { _from , tag , { :add_mon_handler , handler , args , mon } } ->
610- { hib , reply , handlers } = server_add_mon_handler ( handler , args , handlers , mon )
607+ { _from , tag , { :add_handler , handler , args , notify } } ->
608+ { hib , reply , handlers } = server_add_handler ( handler , args , handlers , notify )
609+ reply ( tag , reply )
610+ loop ( parent , name , handlers , debug , hib )
611+ { _from , tag , { :add_mon_handler , handler , args , notify } } ->
612+ { hib , reply , handlers } = server_add_mon_handler ( handler , args , handlers , notify )
611613 reply ( tag , reply )
612614 loop ( parent , name , handlers , debug , hib )
613615 { _from , tag , { :add_process_handler , pid , notify } } ->
614- { hib , reply , handlers } = server_add_process_handler ( pid , notify , handlers )
616+ { hib , reply , handlers } = server_add_process_handler ( pid , handlers , notify )
615617 reply ( tag , reply )
616618 loop ( parent , name , handlers , debug , hib )
617619 { _from , tag , { :delete_handler , handler , args } } ->
@@ -737,34 +739,32 @@ defmodule GenEvent do
737739 IO . puts dev , "*DBG* #{ inspect name } : #{ inspect dbg } "
738740 end
739741
740- defp server_add_handler ( { module , id } , args , handlers ) do
741- handler = handler ( module: module , id: { module , id } )
742+ defp server_add_handler ( { module , id } , args , handlers , notify ) do
743+ handler = handler ( module: module , id: { module , id } , pid: notify )
742744 do_add_handler ( module , handler , args , handlers , :ok )
743745 end
744746
745- defp server_add_handler ( module , args , handlers ) do
746- handler = handler ( module: module , id: module )
747+ defp server_add_handler ( module , args , handlers , notify ) do
748+ handler = handler ( module: module , id: module , pid: notify )
747749 do_add_handler ( module , handler , args , handlers , :ok )
748750 end
749751
750- defp server_add_mon_handler ( { module , id } , args , handlers , pid ) do
751- ref = Process . monitor ( pid )
752- handler = handler ( module: module , id: { module , id } , pid: pid , ref: ref )
752+ defp server_add_mon_handler ( { module , id } , args , handlers , notify ) do
753+ ref = Process . monitor ( notify )
754+ handler = handler ( module: module , id: { module , id } , pid: notify , ref: ref )
753755 do_add_handler ( module , handler , args , handlers , :ok )
754756 end
755757
756- defp server_add_mon_handler ( module , args , handlers , pid ) do
757- ref = Process . monitor ( pid )
758- handler = handler ( module: module , id: module , pid: pid , ref: ref )
758+ defp server_add_mon_handler ( module , args , handlers , notify ) do
759+ ref = Process . monitor ( notify )
760+ handler = handler ( module: module , id: module , pid: notify , ref: ref )
759761 do_add_handler ( module , handler , args , handlers , :ok )
760762 end
761763
762- defp server_add_process_handler ( pid , notify , handlers ) do
764+ defp server_add_process_handler ( pid , handlers , notify ) do
763765 ref = Process . monitor ( pid )
764- # Notice the pid is set only when notifications
765- # are explicitly required.
766766 handler = handler ( module: GenEvent.Stream , id: pid ,
767- pid: if ( notify , do: pid ) , ref: ref )
767+ pid: notify , ref: ref )
768768 do_add_handler ( GenEvent.Stream , handler , { pid , ref } , handlers , { self ( ) , ref } )
769769 end
770770
@@ -779,7 +779,7 @@ defmodule GenEvent do
779779 if sup do
780780 server_add_mon_handler ( module2 , { args2 , state } , handlers , sup )
781781 else
782- server_add_handler ( module2 , { args2 , state } , handlers )
782+ server_add_handler ( module2 , { args2 , state } , handlers , nil )
783783 end
784784 end
785785
@@ -829,7 +829,7 @@ defmodule GenEvent do
829829 { hib , acc }
830830 end
831831
832- defp server_update ( handler , fun , event , name , handlers ) do
832+ defp server_update ( handler , fun , event , name , _handlers ) do
833833 handler ( module: module , state: state ) = handler
834834
835835 case do_handler ( module , fun , [ event , state ] ) do
@@ -839,8 +839,6 @@ defmodule GenEvent do
839839 { false , handler ( handler , state: state ) }
840840 { :ok , state , :hibernate } ->
841841 { true , handler ( handler , state: state ) }
842- { :swap_handler , args1 , state , handler2 , args2 } ->
843- do_swap ( handler ( handler , state: state ) , args1 , handler2 , args2 , name , handlers )
844842 :remove_handler ->
845843 do_terminate ( handler , :remove_handler , event , name , :normal )
846844 :error
@@ -892,7 +890,7 @@ defmodule GenEvent do
892890 end
893891 end
894892
895- defp server_call_update ( handler , query , name , handlers ) do
893+ defp server_call_update ( handler , query , name , _handlers ) do
896894 handler ( module: module , state: state ) = handler
897895 case do_handler ( module , :handle_call , [ query , state ] ) do
898896 { :ok , res } ->
@@ -901,8 +899,6 @@ defmodule GenEvent do
901899 { { false , handler ( handler , state: state ) } , reply }
902900 { :ok , reply , state , :hibernate } ->
903901 { { true , handler ( handler , state: state ) } , reply }
904- { :swap_handler , reply , args1 , state , handler2 , args2 } ->
905- { do_swap ( handler ( handler , state: state ) , args1 , handler2 , args2 , name , handlers ) , reply }
906902 { :remove_handler , reply } ->
907903 do_terminate ( handler , :remove_handler , query , name , :normal )
908904 { :error , reply }
@@ -971,33 +967,6 @@ defmodule GenEvent do
971967 end
972968 end
973969
974- defp do_swap ( handler , args1 , module2 , args2 , name , handlers ) do
975- pid = handler ( handler , :pid )
976- state = do_terminate ( handler ,
977- args1 , :swapped , name , { :swapped , module2 , pid } )
978-
979- { hib , res , handlers } =
980- if handler ( handler , :id ) == module2 or
981- :lists . keyfind ( module2 , handler ( :id ) + 1 , handlers ) == false do
982-
983- if pid do
984- server_add_mon_handler ( module2 , { args2 , state } , [ ] , pid )
985- else
986- server_add_handler ( module2 , { args2 , state } , [ ] )
987- end
988- else
989- { false , { :error , :already_present } , [ ] }
990- end
991-
992- case res do
993- :ok ->
994- { hib , hd ( handlers ) }
995- { :error , reason } ->
996- report_terminate ( handler , reason , state , :swapped , name )
997- :error
998- end
999- end
1000-
1001970 defp do_take_handler ( module , args , handlers , name , last_in , reason ) do
1002971 case :lists . keytake ( module , handler ( :id ) + 1 , handlers ) do
1003972 { :value , handler , handlers } ->
0 commit comments