我在ejabberd中添加了gen_mod行为之后的一些模块以实现我的私有服务,并在这些模块中添加一些钩子。这大部分时间都适用。
ejabberd_hooks:add(unset_presence_hook, Host,
?MODULE, unset_presence_hook, 10),
但是当我调用ejabberdctl停止时,ejabberd会执行以下代码,我发现
gen_mod:stop_modules()
在broadcast_c2s_shutdown()
之前完成,
ejabberd_c2s中的一些钩子,例如"取消设置状态挂钩" ,因为我的模块已经关闭所以无法进行。
prep_stop(State) ->
ejabberd_listener:stop_listeners(),
gen_mod:stop_modules(),
ejabberd_admin:stop(),
broadcast_c2s_shutdown(),
timer:sleep(5000),
State.
我想知道为什么ejabberd会在关闭c2s进程之前停止模块, 或者这个设计的目的是什么?