]> granicus.if.org Git - ejabberd/commitdiff
Attach modules to gen_mod's supervisor
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 14 Feb 2017 09:39:26 +0000 (12:39 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 14 Feb 2017 09:39:26 +0000 (12:39 +0300)
25 files changed:
include/bosh.hrl
src/ejabberd_bosh.erl
src/gen_mod.erl
src/mod_announce.erl
src/mod_bosh.erl
src/mod_caps.erl
src/mod_carboncopy.erl
src/mod_delegation.erl
src/mod_echo.erl
src/mod_fail2ban.erl
src/mod_http_fileserver.erl
src/mod_http_upload.erl
src/mod_http_upload_quota.erl
src/mod_irc.erl
src/mod_mix.erl
src/mod_muc.erl
src/mod_muc_log.erl
src/mod_multicast.erl
src/mod_offline.erl
src/mod_ping.erl
src/mod_privilege.erl
src/mod_pubsub.erl
src/mod_shared_roster_ldap.erl
src/mod_sip_registrar.erl
src/mod_vcard.erl

index 6468efac412e3c9522e804ce1d7f1c5dc42fca6f..3f9095e58481159e147760af8ef331391a690f8d 100644 (file)
@@ -47,5 +47,3 @@
 
 -define(HEADER(CType),
        [CType, ?AC_ALLOW_ORIGIN, ?AC_ALLOW_HEADERS]).
-
--define(PROCNAME, ejabberd_mod_bosh).
index b38de25152a73dc9e9809dd6c1449cb7853179d8..91641523e276cd596ccc22c1705ef54eaee54a96 100644 (file)
 
 start(#body{attrs = Attrs} = Body, IP, SID) ->
     XMPPDomain = get_attr(to, Attrs),
-    SupervisorProc = gen_mod:get_module_proc(XMPPDomain, ?PROCNAME),
+    SupervisorProc = gen_mod:get_module_proc(XMPPDomain, mod_bosh),
     case catch supervisor:start_child(SupervisorProc,
                                      [Body, IP, SID])
        of
index 872ae8589ff764d0f90e9e0be9c1decce5d9db91..578b3e7e07790a3c5e3ecbda4cc87860fa3ca766 100644 (file)
 -module(gen_mod).
 
 -behaviour(ejabberd_config).
+-behaviour(supervisor).
 
 -author('alexey@process-one.net').
 
+-export([init/1, start_link/0, start_child/3, start_child/4,
+        stop_child/1, stop_child/2]).
 -export([start/0, start_module/2, start_module/3,
         stop_module/2, stop_module_keep_config/2, get_opt/3,
         get_opt/4, get_opt_host/3, opt_type/1,
 -export_type([opts/0]).
 -export_type([db_type/0]).
 
-%%behaviour_info(callbacks) -> [{start, 2}, {stop, 1}];
-%%behaviour_info(_Other) -> undefined.
+-ifndef(GEN_SERVER).
+-define(GEN_SERVER, gen_server).
+-endif.
 
 start() ->
+    Spec = {ejabberd_gen_mod_sup, {?MODULE, start_link, []},
+           permanent, infinity, supervisor, [?MODULE]},
+    supervisor:start_child(ejabberd_sup, Spec).
+
+start_link() ->
+    supervisor:start_link({local, ejabberd_gen_mod_sup}, ?MODULE, []).
+
+init([]) ->
     ets:new(ejabberd_modules,
            [named_table, public,
             {keypos, #ejabberd_module.module_host}]),
-    ok.
+    {ok, {{one_for_one, 10, 1}, []}}.
+
+-spec start_child(module(), binary() | global, opts()) -> ok | {error, any()}.
+start_child(Mod, Host, Opts) ->
+    start_child(Mod, Host, Opts, get_module_proc(Host, Mod)).
+
+-spec start_child(module(), binary() | global, opts(), atom()) -> ok | {error, any()}.
+start_child(Mod, Host, Opts, Proc) ->
+    Spec = {Proc, {?GEN_SERVER, start_link,
+                  [{local, Proc}, Mod, [Host, Opts], []]},
+            transient, 2000, worker, [Mod]},
+    supervisor:start_child(ejabberd_gen_mod_sup, Spec).
+
+-spec stop_child(module(), binary() | global) -> ok.
+stop_child(Mod, Host) ->
+    stop_child(get_module_proc(Host, Mod)).
+
+-spec stop_child(atom()) -> ok | {error, any()}.
+stop_child(Proc) ->
+    supervisor:terminate_child(ejabberd_gen_mod_sup, Proc),
+    supervisor:delete_child(ejabberd_gen_mod_sup, Proc).
 
 -spec start_modules() -> any().
 
@@ -500,7 +532,6 @@ get_hosts(Opts, Prefix) ->
     end.
 
 -spec get_module_proc(binary(), {frontend, atom()} | atom()) -> atom().
-
 get_module_proc(Host, {frontend, Base}) ->
     get_module_proc(<<"frontend_", Host/binary>>, Base);
 get_module_proc(Host, Base) ->
index e22a4222338f651f87462e5ab87ea86fa92a76c9..c21adfb002b5fd51763eb0e3bbb924196ac8c541 100644 (file)
@@ -37,7 +37,7 @@
         disco_features/5, disco_items/5, depends/2,
         send_announcement_to_all/3, announce_commands/4,
         announce_items/4, mod_opt_type/1]).
--export([start_link/2, init/1, handle_call/3, handle_cast/2,
+-export([init/1, handle_call/3, handle_cast/2,
         handle_info/2, terminate/2, code_change/3]).
 
 -include("ejabberd.hrl").
 
 -record(state, {host :: binary()}).
 
--define(PROCNAME, ejabberd_announce).
-
 -define(NS_ADMINL(Sub), [<<"http:">>, <<"jabber.org">>, <<"protocol">>,
                          <<"admin">>, <<Sub>>]).
 
 tokenize(Node) -> str:tokens(Node, <<"/#">>).
 
-%%====================================================================
-%% API
-%%====================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 %%====================================================================
 %% gen_mod callbacks
 %%====================================================================
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    Spec = {Proc, {?MODULE, start_link, [Host, Opts]},
-           transient, 2000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, Spec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 depends(_Host, _Opts) ->
     [{mod_adhoc, hard}].
@@ -155,7 +140,7 @@ code_change(_OldVsn, State, _Extra) ->
 %% Announcing via messages to a custom resource
 -spec announce(jid(), jid(), stanza()) -> ok | stop.
 announce(From, #jid{luser = <<>>} = To, #message{} = Packet) ->
-    Proc = gen_mod:get_module_proc(To#jid.lserver, ?PROCNAME),
+    Proc = gen_mod:get_module_proc(To#jid.lserver, ?MODULE),
     Res = case To#jid.lresource of
              <<"announce/all">> ->
                  gen_server:cast(Proc, {announce_all, From, To, Packet});
@@ -539,7 +524,7 @@ handle_adhoc_form(From, #jid{lserver = LServer} = To,
     Packet = #message{type = headline,
                      body = xmpp:mk_text(Body),
                      subject = xmpp:mk_text(Subject)},
-    Proc = gen_mod:get_module_proc(LServer, ?PROCNAME),
+    Proc = gen_mod:get_module_proc(LServer, ?MODULE),
     case {Node, Body} of
        {?NS_ADMIN_DELETE_MOTD, _} ->
            if  Confirm ->
@@ -560,7 +545,7 @@ handle_adhoc_form(From, #jid{lserver = LServer} = To,
            %% Throw an error and give him/her a chance to send message again.
            {error, xmpp:err_not_acceptable(
                      <<"No body provided for announce message">>, Lang)};
-       %% Now send the packet to ?PROCNAME.
+       %% Now send the packet to ?MODULE.
        %% We don't use direct announce_* functions because it
        %% leads to large delay in response and <iq/> queries processing
        {?NS_ADMIN_ANNOUNCE, _} ->
index 92ce6bc10b86730632695f66c7607fe80ebedb3b..fd33d4b798beb4798251cc2e853720caab7fee6b 100644 (file)
@@ -92,14 +92,14 @@ start(Host, Opts) ->
     start_jiffy(Opts),
     Mod = gen_mod:ram_db_mod(global, ?MODULE),
     Mod:init(),
-    TmpSup = gen_mod:get_module_proc(Host, ?PROCNAME),
+    TmpSup = gen_mod:get_module_proc(Host, ?MODULE),
     TmpSupSpec = {TmpSup,
                  {ejabberd_tmp_sup, start_link, [TmpSup, ejabberd_bosh]},
                  permanent, infinity, supervisor, [ejabberd_tmp_sup]},
     supervisor:start_child(ejabberd_sup, TmpSupSpec).
 
 stop(Host) ->
-    TmpSup = gen_mod:get_module_proc(Host, ?PROCNAME),
+    TmpSup = gen_mod:get_module_proc(Host, ?MODULE),
     supervisor:terminate_child(ejabberd_sup, TmpSup),
     supervisor:delete_child(ejabberd_sup, TmpSup).
 
index c001a696c7ee6503de2c2878ba4a025e1bba9877..85c301f6cbb87632363a83e4a7ff2236bb94aa8d 100644 (file)
@@ -41,7 +41,7 @@
          get_user_caps/2, import_start/2, import_stop/2]).
 
 %% gen_mod callbacks
--export([start/2, start_link/2, stop/1, depends/2]).
+-export([start/2, stop/1, depends/2]).
 
 %% gen_server callbacks
 -export([init/1, handle_info/2, handle_call/3,
@@ -56,8 +56,6 @@
 -include("xmpp.hrl").
 -include("mod_caps.hrl").
 
--define(PROCNAME, ejabberd_mod_caps).
-
 -define(BAD_HASH_LIFETIME, 600).
 
 -record(state, {host = <<"">> :: binary()}).
 -callback caps_write(binary(), {binary(), binary()},
                     non_neg_integer() | [binary()]) -> any().
 
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE,
-                         [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc).
+    gen_mod:stop_child(?MODULE, Host).
 
 -spec get_features(binary(), nothing | caps()) -> [binary()].
 get_features(_Host, nothing) -> [];
index 202c7005a08cf753ffc8b8fa1766df999c401fd1..0c782b728ce42c551dc76243acaf38d646d14d9e 100644 (file)
@@ -42,7 +42,6 @@
 -include("ejabberd.hrl").
 -include("logger.hrl").
 -include("xmpp.hrl").
--define(PROCNAME, ?MODULE).
 
 -type direction() :: sent | received.
 
index 9abf5a45f489a69d263f48316c49e6ea17f5ecd2..2037bfa3473b6c8b6bf120f1f4e7ce20f6198405 100644 (file)
@@ -31,7 +31,6 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2]).
 -export([start/2, stop/1, mod_opt_type/1, depends/2]).
 %% gen_server callbacks
 -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
 %%%===================================================================
 %%% API
 %%%===================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    PingSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 2000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, PingSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 mod_opt_type(iqdisc) -> fun gen_iq_handler:check_type/1;
 mod_opt_type(namespaces) -> validate_fun();
index 80e41494b9a0c9aa1a531b2d4e1e13c91ba4f606..7c8722fce9e81844c5b9c53f17c2e70c79774d68 100644 (file)
@@ -32,8 +32,7 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2, start/2, stop/1,
-        do_client_version/3]).
+-export([start/2, stop/1, do_client_version/3]).
 
 -export([init/1, handle_call/3, handle_cast/2,
         handle_info/2, terminate/2, code_change/3,
 
 -record(state, {host = <<"">> :: binary()}).
 
--define(PROCNAME, ejabberd_mod_echo).
-
 %%====================================================================
-%% API
+%% gen_mod API
 %%====================================================================
-%%--------------------------------------------------------------------
-%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
-%% Description: Starts the server
-%%--------------------------------------------------------------------
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE,
-                         [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
+
+depends(_Host, _Opts) ->
+    [].
+
+mod_opt_type(host) -> fun iolist_to_binary/1;
+mod_opt_type(_) -> [host].
 
 %%====================================================================
 %% gen_server callbacks
@@ -190,9 +178,3 @@ do_client_version(enabled, From, To) ->
     after 5000 -> % Timeout in miliseconds: 5 seconds
            []
     end.
-
-depends(_Host, _Opts) ->
-    [].
-
-mod_opt_type(host) -> fun iolist_to_binary/1;
-mod_opt_type(_) -> [host].
index d76b2f9904af7d73d84077537374afa7db937bce..94d4d89e223e77e82cb2ebcd08e6079e0c3de44e 100644 (file)
@@ -28,7 +28,7 @@
 -behaviour(gen_server).
 
 %% API
--export([start_link/2, start/2, stop/1, c2s_auth_result/3,
+-export([start/2, stop/1, c2s_auth_result/3,
         c2s_stream_started/2]).
 
 -export([init/1, handle_call/3, handle_cast/2,
 %%%===================================================================
 %%% API
 %%%===================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 -spec c2s_auth_result(ejabberd_c2s:state(), boolean(), binary())
       -> ejabberd_c2s:state() | {stop, ejabberd_c2s:state()}.
 c2s_auth_result(#{ip := {Addr, _}, lserver := LServer} = State, false, _User) ->
@@ -111,16 +107,10 @@ c2s_stream_started(#{ip := {Addr, _}} = State, _) ->
 %%====================================================================
 start(Host, Opts) ->
     catch ets:new(failed_auth, [named_table, public]),
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 depends(_Host, _Opts) ->
     [].
index 7c95d96bdd722a2d251155f790b38f94e468bcf2..143ab03f58d272983ee1377dd034f9d377fd2a71 100644 (file)
@@ -33,9 +33,6 @@
 %% gen_mod callbacks
 -export([start/2, stop/1]).
 
-%% API
--export([start_link/2]).
-
 %% gen_server callbacks
 -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
         terminate/2, code_change/3]).
@@ -58,8 +55,6 @@
         directory_indices, custom_headers, default_content_type,
         content_types = [], user_access = none}).
 
--define(PROCNAME, ejabberd_mod_http_fileserver).
-
 %% Response is {DataSize, Code, [{HeaderKey, HeaderValue}], Data}
 -define(HTTP_ERR_FILE_NOT_FOUND,
        {-1, 404, [], <<"Not found">>}).
 %%====================================================================
 
 start(Host, Opts) ->
-    Proc = get_proc_name(Host),
-    ChildSpec =
-       {Proc,
-        {?MODULE, start_link, [Host, Opts]},
-        transient, % if process crashes abruptly, it gets restarted
-        1000,
-        worker,
-        [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = get_proc_name(Host),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 depends(_Host, _Opts) ->
     [].
 
-%%====================================================================
-%% API
-%%====================================================================
-%%--------------------------------------------------------------------
-%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
-%% Description: Starts the server
-%%--------------------------------------------------------------------
-start_link(Host, Opts) ->
-    Proc = get_proc_name(Host),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 %%====================================================================
 %% gen_server callbacks
 %%====================================================================
@@ -459,7 +432,7 @@ find_header(Header, Headers, Default) ->
 %% Utilities
 %%----------------------------------------------------------------------
 
-get_proc_name(Host) -> gen_mod:get_module_proc(Host, ?PROCNAME).
+get_proc_name(Host) -> gen_mod:get_module_proc(Host, ?MODULE).
 
 join([], _) ->
     <<"">>;
index 55efc1ab09bf4a74350784fd0f154d19d4fb0c8c..c32c189e132f3e47908037204bfdf6c966ac7327 100644 (file)
 
 -protocol({xep, 363, '0.1'}).
 
+-ifndef(GEN_SERVER).
 -define(GEN_SERVER, gen_server).
+-endif.
 -define(SERVICE_REQUEST_TIMEOUT, 5000). % 5 seconds.
 -define(SLOT_TIMEOUT, 18000000). % 5 hours.
--define(PROCNAME, ?MODULE).
 -define(FORMAT(Error), file:format_error(Error)).
 -define(URL_ENC(URL), binary_to_list(ejabberd_http:url_encode(URL))).
 -define(ADDR_TO_STR(IP), ejabberd_config:may_hide_data(jlib:ip_to_list(IP))).
@@ -65,8 +66,7 @@
 -behaviour(gen_mod).
 
 %% gen_mod/supervisor callbacks.
--export([start_link/3,
-        start/2,
+-export([start/2,
         stop/1,
         depends/2,
         mod_opt_type/1]).
 %%--------------------------------------------------------------------
 %% gen_mod/supervisor callbacks.
 %%--------------------------------------------------------------------
-
--spec start_link(binary(), atom(), gen_mod:opts())
-      -> {ok, pid()} | ignore | {error, _}.
-
-start_link(ServerHost, Proc, Opts) ->
-    ?GEN_SERVER:start_link({local, Proc}, ?MODULE, {ServerHost, Opts}, []).
-
 -spec start(binary(), gen_mod:opts()) -> {ok, _} | {ok, _, _} | {error, _}.
 
 start(ServerHost, Opts) ->
@@ -143,14 +136,8 @@ start(ServerHost, Opts) ->
        false ->
            ok
     end,
-    Proc = get_proc_name(ServerHost, ?PROCNAME),
-    Spec = {Proc,
-           {?MODULE, start_link, [ServerHost, Proc, Opts]},
-           permanent,
-           3000,
-           worker,
-           [?MODULE]},
-    supervisor:start_child(ejabberd_sup, Spec).
+    Proc = get_proc_name(ServerHost, ?MODULE),
+    gen_mod:start_child(?MODULE, ServerHost, Opts, Proc).
 
 -spec stop(binary()) -> ok.
 
@@ -164,9 +151,8 @@ stop(ServerHost) ->
        false ->
            ok
     end,
-    Proc = get_proc_name(ServerHost, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc).
+    Proc = get_proc_name(ServerHost, ?MODULE),
+    gen_mod:stop_child(Proc).
 
 -spec mod_opt_type(atom()) -> fun((term()) -> term()) | [atom()].
 
@@ -230,7 +216,7 @@ depends(_Host, _Opts) ->
 
 -spec init({binary(), gen_mod:opts()}) -> {ok, state()}.
 
-init({ServerHost, Opts}) ->
+init([ServerHost, Opts]) ->
     process_flag(trap_exit, true),
     Host = gen_mod:get_opt_host(ServerHost, Opts, <<"upload.@HOST@">>),
     Name = gen_mod:get_opt(name, Opts,
@@ -750,7 +736,7 @@ parse_http_request(#request{host = Host, path = Path}) ->
                         true ->
                              {Host, Path}
                      end,
-    {gen_mod:get_module_proc(ProcURL, ?PROCNAME), Slot}.
+    {gen_mod:get_module_proc(ProcURL, ?MODULE), Slot}.
 
 -spec store_file(binary(), binary(),
                 integer() | undefined,
index c7a69774333b77f149be3b5d42a258a85a0bd196..ee0ea9d1d4bd1761e795a82a0d8d58f1fa0b2d43 100644 (file)
@@ -26,8 +26,9 @@
 -module(mod_http_upload_quota).
 -author('holger@zedat.fu-berlin.de').
 
+-ifndef(GEN_SERVER).
 -define(GEN_SERVER, gen_server).
--define(PROCNAME, ?MODULE).
+-endif.
 -define(TIMEOUT, timer:hours(24)).
 -define(INITIAL_TIMEOUT, timer:minutes(10)).
 -define(FORMAT(Error), file:format_error(Error)).
@@ -36,8 +37,7 @@
 -behaviour(gen_mod).
 
 %% gen_mod/supervisor callbacks.
--export([start_link/3,
-        start/2,
+-export([start/2,
         stop/1,
         depends/2,
         mod_opt_type/1]).
 %%--------------------------------------------------------------------
 %% gen_mod/supervisor callbacks.
 %%--------------------------------------------------------------------
-
--spec start_link(binary(), atom(), gen_mod:opts())
-      -> {ok, pid()} | ignore | {error, _}.
-
-start_link(ServerHost, Proc, Opts) ->
-    ?GEN_SERVER:start_link({local, Proc}, ?MODULE, {ServerHost, Opts}, []).
-
 -spec start(binary(), gen_mod:opts()) -> {ok, _} | {ok, _, _} | {error, _}.
 
 start(ServerHost, Opts) ->
-    Proc = mod_http_upload:get_proc_name(ServerHost, ?PROCNAME),
-    Spec = {Proc,
-           {?MODULE, start_link, [ServerHost, Proc, Opts]},
-           permanent,
-           3000,
-           worker,
-           [?MODULE]},
-    supervisor:start_child(ejabberd_sup, Spec).
+    Proc = mod_http_upload:get_proc_name(ServerHost, ?MODULE),
+    gen_mod:start_child(?MODULE, ServerHost, Opts, Proc).
 
 -spec stop(binary()) -> ok.
 
 stop(ServerHost) ->
-    Proc = mod_http_upload:get_proc_name(ServerHost, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc).
+    Proc = mod_http_upload:get_proc_name(ServerHost, ?MODULE),
+    gen_mod:stop_child(Proc).
 
 -spec mod_opt_type(atom()) -> fun((term()) -> term()) | [atom()].
 
@@ -119,9 +105,7 @@ depends(_Host, _Opts) ->
 %% gen_server callbacks.
 %%--------------------------------------------------------------------
 
--spec init({binary(), gen_mod:opts()}) -> {ok, state()}.
-
-init({ServerHost, Opts}) ->
+init([ServerHost, Opts]) ->
     process_flag(trap_exit, true),
     AccessSoftQuota = gen_mod:get_opt(access_soft_quota, Opts,
                                      fun acl:shaper_rules_validator/1,
@@ -268,7 +252,7 @@ code_change(_OldVsn, #state{server_host = ServerHost} = State, _Extra) ->
 
 handle_slot_request(allow, #jid{lserver = ServerHost} = JID, Path, Size,
                    _Lang) ->
-    Proc = mod_http_upload:get_proc_name(ServerHost, ?PROCNAME),
+    Proc = mod_http_upload:get_proc_name(ServerHost, ?MODULE),
     ?GEN_SERVER:cast(Proc, {handle_slot_request, JID, Path, Size}),
     allow;
 handle_slot_request(Acc, _JID, _Path, _Size, _Lang) -> Acc.
index 25c7430b28eccceba2f88cdaaa22c066107cd450..dcb603317e4642e6d5f0efdcfd239810015ff403 100644 (file)
@@ -32,7 +32,7 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2, start/2, stop/1, export/1, import/1,
+-export([start/2, stop/1, export/1, import/1,
         import/3, closed_connection/3, get_connection_params/3,
         data_to_binary/2, process_disco_info/1, process_disco_items/1,
         process_register/1, process_vcard/1, process_command/1]).
                 server_host = <<"">> :: binary(),
                 access = all         :: atom()}).
 
--define(PROCNAME, ejabberd_mod_irc).
-
 -callback init(binary(), gen_mod:opts()) -> any().
 -callback import(binary(), #irc_custom{}) -> ok | pass.
 -callback get_data(binary(), binary(), jid()) -> error | empty | irc_data().
 -callback set_data(binary(), binary(), jid(), irc_data()) -> {atomic, any()}.
 
 %%====================================================================
-%% API
+%% gen_mod API
 %%====================================================================
-%%--------------------------------------------------------------------
-%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
-%% Description: Starts the server
-%%--------------------------------------------------------------------
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE,
-                         [Host, Opts], []).
-
 start(Host, Opts) ->
     start_supervisor(Host),
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
     stop_supervisor(Host),
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 depends(_Host, _Opts) ->
     [].
index 9282d4a168dd8e1534020c20ba509b7e2b91a0dc..6ee796fc6beb9ece4e3160bd11c220f47378d2d8 100644 (file)
@@ -28,7 +28,7 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2, start/2, stop/1, process_iq/1,
+-export([start/2, stop/1, process_iq/1,
         disco_items/5, disco_identity/5, disco_info/5,
         disco_features/5, mod_opt_type/1, depends/2]).
 
@@ -39,7 +39,6 @@
 -include("logger.hrl").
 -include("xmpp.hrl").
 
--define(PROCNAME, ejabberd_mod_mix).
 -define(NODES, [?NS_MIX_NODES_MESSAGES,
                ?NS_MIX_NODES_PRESENCE,
                ?NS_MIX_NODES_PARTICIPANTS,
 %%%===================================================================
 %%% API
 %%%===================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 5000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 -spec disco_features({error, stanza_error()} | {result, [binary()]} | empty,
                     jid(), jid(), binary(), binary()) -> {result, [binary()]}.
index 9f39b17fde5f1a6ded55f1996435c8c6b2b1f79f..046b691fa68637f0b31491e2e420d2ea1b097a05 100644 (file)
@@ -34,8 +34,7 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2,
-        start/2,
+-export([start/2,
         stop/1,
         room_destroyed/4,
         store_room/4,
@@ -83,8 +82,6 @@
          default_room_opts = [] :: list(),
          room_shaper = none :: shaper:shaper()}).
 
--define(PROCNAME, ejabberd_mod_muc).
-
 -type muc_room_opts() :: [{atom(), any()}].
 -callback init(binary(), gen_mod:opts()) -> any().
 -callback import(binary(), binary(), [binary()]) -> ok.
 %%====================================================================
 %% API
 %%====================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE,
-                         [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
     Rooms = shutdown_rooms(Host),
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
+    gen_mod:stop_child(?MODULE, Host),
     {wait, Rooms}.
 
 depends(_Host, _Opts) ->
@@ -150,7 +137,7 @@ shutdown_rooms(Host) ->
 %%    In this case, the mod_muc process died before the room processes
 %%    So the message sending must be catched
 room_destroyed(Host, Room, Pid, ServerHost) ->
-    catch gen_mod:get_module_proc(ServerHost, ?PROCNAME) !
+    catch gen_mod:get_module_proc(ServerHost, ?MODULE) !
            {room_destroyed, {Room, Host}, Pid},
     ok.
 
@@ -158,7 +145,7 @@ room_destroyed(Host, Room, Pid, ServerHost) ->
 %% If Opts = default, the default room options are used.
 %% Else use the passed options as defined in mod_muc_room.
 create_room(Host, Name, From, Nick, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
+    Proc = gen_mod:get_module_proc(Host, ?MODULE),
     gen_server:call(Proc, {create, Name, From, Nick, Opts}).
 
 store_room(ServerHost, Host, Name, Opts) ->
index fb9d22328122317e9b1be192019891e5365c7735..916deef24598f67c1f4cb39e67bc34b0d3eee45d 100644 (file)
@@ -36,7 +36,7 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2, start/2, stop/1, transform_module_options/1,
+-export([start/2, stop/1, transform_module_options/1,
         check_access_log/2, add_to_log/5]).
 
 -export([init/1, handle_call/3, handle_cast/2,
@@ -50,7 +50,6 @@
 -include("mod_muc_room.hrl").
 
 -define(T(Text), translate:translate(Lang, Text)).
--define(PROCNAME, ejabberd_mod_muc_log).
 -record(room, {jid, title, subject, subject_author, config}).
 
 -define(PLAINTEXT_CO, <<"ZZCZZ">>).
 %%====================================================================
 %% API
 %%====================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 add_to_log(Host, Type, Data, Room, Opts) ->
     gen_server:cast(get_proc_name(Host),
@@ -1185,7 +1174,7 @@ get_room_state(RoomPid) ->
     R.
 
 get_proc_name(Host) ->
-    gen_mod:get_module_proc(Host, ?PROCNAME).
+    gen_mod:get_module_proc(Host, ?MODULE).
 
 calc_hour_offset(TimeHere) ->
     TimeZero = calendar:universal_time(),
index 7e8e21c3130353ff0a3803c5c4a4c7cf9caf9afd..8948131fd55d4295f818a7cea15a5c64c7ca556a 100644 (file)
@@ -34,7 +34,7 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2, start/2, stop/1]).
+-export([start/2, stop/1]).
 
 %% gen_server callbacks
 -export([init/1, handle_info/2, handle_call/3,
@@ -97,8 +97,6 @@
 
 -define(VERSION_MULTICAST, <<"$Revision: 440 $ ">>).
 
--define(PROCNAME, ejabberd_mod_multicast).
-
 -define(PURGE_PROCNAME,
        ejabberd_mod_multicast_purgeloop).
 
 
 -define(DEFAULT_LIMIT_REMOTE_PRESENCE, 20).
 
-start_link(LServerS, Opts) ->
-    Proc = gen_mod:get_module_proc(LServerS, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE,
-                         [LServerS, Opts], []).
-
 start(LServerS, Opts) ->
-    Proc = gen_mod:get_module_proc(LServerS, ?PROCNAME),
-    ChildSpec = {Proc,
-                {?MODULE, start_link, [LServerS, Opts]}, temporary,
-                1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, LServerS, Opts).
 
 stop(LServerS) ->
-    Proc = gen_mod:get_module_proc(LServerS, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, LServerS).
 
 %%====================================================================
 %% gen_server callbacks
index 082386514b180d97dfd4ebcbce3d10eb1be5c0b0..9ed9ab91f11d81cc781bb5b71a6bff085a07c4d5 100644 (file)
 -protocol({xep, 160, '1.0'}).
 -protocol({xep, 334, '0.2'}).
 
--define(GEN_SERVER, p1_server).
+-ifndef(GEN_SERVER).
+-define(GEN_SERVER, gen_server).
+-endif.
 -behaviour(?GEN_SERVER).
 
 -behaviour(gen_mod).
 
 -export([start/2,
-        start_link/2,
         stop/1,
         store_packet/4,
         store_offline_msg/5,
@@ -83,8 +84,6 @@
 
 -include("mod_offline.hrl").
 
--define(PROCNAME, ejabberd_offline).
-
 -define(OFFLINE_TABLE_LOCK_THRESHOLD, 1000).
 
 %% default value for the maximum number of user messages
 -callback remove_all_messages(binary(), binary()) -> {atomic, any()}.
 -callback count_messages(binary(), binary()) -> non_neg_integer().
 
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ?GEN_SERVER:start_link({local, Proc}, ?MODULE,
-                           [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 depends(_Host, _Opts) ->
     [].
@@ -478,7 +466,7 @@ store_packet(Acc, From, To, Packet) ->
                        NewPacket ->
                            TimeStamp = p1_time_compat:timestamp(),
                            Expire = find_x_expire(TimeStamp, NewPacket),
-                           gen_mod:get_module_proc(To#jid.lserver, ?PROCNAME) !
+                           gen_mod:get_module_proc(To#jid.lserver, ?MODULE) !
                                #offline_msg{us = {LUser, LServer},
                                             timestamp = TimeStamp,
                                             expire = Expire,
index 1c1d24850f1d35dbea2bc0c0ffefcdc7017b0e66..fd88c12dc4b384e5e169f1c79cd976283d415cfb 100644 (file)
@@ -45,7 +45,7 @@
 -define(DEFAULT_PING_INTERVAL, 60).
 
 %% API
--export([start_link/2, start_ping/2, stop_ping/2]).
+-export([start_ping/2, stop_ping/2]).
 
 %% gen_mod callbacks
 -export([start/2, stop/1]).
 %%====================================================================
 %% API
 %%====================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    gen_server:start_link({local, Proc}, ?MODULE,
-                         [Host, Opts], []).
-
 -spec start_ping(binary(), jid()) -> ok.
 start_ping(Host, JID) ->
     Proc = gen_mod:get_module_proc(Host, ?MODULE),
@@ -87,16 +82,10 @@ stop_ping(Host, JID) ->
 %% gen_mod callbacks
 %%====================================================================
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    PingSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-               transient, 2000, worker, [?MODULE]},
-    supervisor:start_child(?SUPERVISOR, PingSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(?SUPERVISOR, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 %%====================================================================
 %% gen_server callbacks
index 3783470b2cb53397357de2fe7e1a562746a3a866..c65119d4c95fb6c8986472a1df0cf3ee086889c9 100644 (file)
@@ -31,7 +31,6 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2]).
 -export([start/2, stop/1, mod_opt_type/1, depends/2]).
 %% gen_server callbacks
 -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
 %%%===================================================================
 %%% API
 %%%===================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    PingSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                transient, 2000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, PingSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 mod_opt_type(roster) -> v_roster();
 mod_opt_type(message) -> v_message();
index 8acfdb7ce1dd2ef970856bc411afd1db2b61482d..90d2a758fe75684371591c175e3a29ca41866109 100644 (file)
         err_unsupported_access_model/0]).
 
 %% API and gen_server callbacks
--export([start_link/2, start/2, stop/1, init/1,
+-export([start/2, stop/1, init/1,
     handle_call/3, handle_cast/2, handle_info/2,
     terminate/2, code_change/3, depends/2]).
 
 -export([send_loop/1, mod_opt_type/1]).
 
--define(PROCNAME, ejabberd_mod_pubsub).
 -define(LOOPNAME, ejabberd_mod_pubsub_loop).
 
 %%====================================================================
     ).
 
 
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-           transient, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 %%====================================================================
 %% gen_server callbacks
index feb95810549dc1798f1348fab57ffa2dc9d36bdd..47ba9f08c8f90067336319818c7c9eb5b7ede5a5 100644 (file)
@@ -33,7 +33,7 @@
 -behaviour(gen_mod).
 
 %% API
--export([start_link/2, start/2, stop/1]).
+-export([start/2, stop/1]).
 
 %% gen_server callbacks
 -export([init/1, handle_call/3, handle_cast/2,
 %%====================================================================
 %% API
 %%====================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    gen_server:start_link({local, Proc}, ?MODULE,
-                         [Host, Opts], []).
-
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
-                permanent, 1000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, ChildSpec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?MODULE),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 depends(_Host, _Opts) ->
     [{mod_roster, hard}].
index a6535c0f1d32b4b30884b6292113388fb4904197..1cc4dc3a183c5597577c56c6239f167fcb5c644f 100644 (file)
@@ -24,7 +24,9 @@
 %%%-------------------------------------------------------------------
 -module(mod_sip_registrar).
 
--define(GEN_SERVER, p1_server).
+-ifndef(GEN_SERVER).
+-define(GEN_SERVER, gen_server).
+-endif.
 -behaviour(?GEN_SERVER).
 
 %% API
index f05de693f2cdbe96c92ac1fc186690f1e9ade8b3..72dc4a2b9a87f06e280fbf6203514e82b4f9cc4c 100644 (file)
@@ -39,7 +39,7 @@
         depends/2, process_search/1, process_vcard/1, get_vcard/2,
         disco_items/5, disco_features/5, disco_identity/5,
         decode_iq_subel/1, mod_opt_type/1, set_vcard/3, make_vcard_search/4]).
--export([start_link/2, init/1, handle_call/3, handle_cast/2,
+-export([init/1, handle_call/3, handle_cast/2,
         handle_info/2, terminate/2, code_change/3]).
 
 -include("ejabberd.hrl").
@@ -49,8 +49,6 @@
 
 -define(JUD_MATCHES, 30).
 
--define(PROCNAME, ejabberd_mod_vcard).
-
 -callback init(binary(), gen_mod:opts()) -> any().
 -callback stop(binary()) -> any().
 -callback import(binary(), binary(), [binary()]) -> ok.
 
 -record(state, {host :: binary(), server_host :: binary()}).
 
-%%====================================================================
-%% API
-%%====================================================================
-start_link(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
-
 %%====================================================================
 %% gen_mod callbacks
 %%====================================================================
 start(Host, Opts) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    Spec = {Proc, {?MODULE, start_link, [Host, Opts]},
-           transient, 2000, worker, [?MODULE]},
-    supervisor:start_child(ejabberd_sup, Spec).
+    gen_mod:start_child(?MODULE, Host, Opts).
 
 stop(Host) ->
-    Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:terminate_child(ejabberd_sup, Proc),
-    supervisor:delete_child(ejabberd_sup, Proc),
-    ok.
+    gen_mod:stop_child(?MODULE, Host).
 
 %%====================================================================
 %% gen_server callbacks