[erlang-questions] otp supervisor terminate callback
Vance Shipley
vances@REDACTED
Wed Apr 24 15:06:55 CEST 2013
On Wed, Apr 24, 2013 at 06:49:45PM +0800, Seven Du wrote:
} I want a terminate callback in the -behaviour(supervisor).
Sometimes it's easiest to change what you want. :)
On Apr 20, 2013 4:34 PM, "Seven Du" <dujinfang@REDACTED> wrote:
} Specifically I want to write an application which starts a supervisor,
} and add a handler to some existing gen_event by calling
} gen_event:add_handler() on init(), and I want to call
} gen_event:remove_handler() when the application is stop.
If your application really only installs an event handler you might
not need a supervisor at all. You can install the handler in your
application behaviour start/1,2 callback and uninstall it in the
stop/1 callback.
For a robust application you would probably want to have a supervisor
with a child worker, say a gen_server behaviour, which can supervise
the event handler. Have your application behaviour start/1,2 callback
start the supervisor. The supervisor starts the gen_server. The init/1
callback of the gen_server behaviour would use event_handler:add_sup_handler/3
to install the event handler. Add a clause in your handle_info/2 callback
to handle the case where the event handler gets removed:
handle_info({gen_event_EXIT, Handler, Reason}, State) ->
error_logger:error_report([gen_event_EXIT, {event_handler, Handler},
{reason, Reason}]),
case gen_event:add_sup_handler(State#state.ref, Handler, []) of
ok ->
{noreply, State}
Other ->
{stop, Other, State}
end.
--
-Vance
More information about the erlang-questions
mailing list