aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.in4
-rwxr-xr-xsrc/configure19
-rw-r--r--src/configure.ac9
-rw-r--r--src/ejabberd_c2s.erl11
-rw-r--r--src/ejabberd_s2s_in.erl11
-rw-r--r--src/ejabberd_s2s_out.erl11
-rw-r--r--src/mod_muc/Makefile.in5
-rw-r--r--src/mod_muc/mod_muc_room.erl18
8 files changed, 80 insertions, 8 deletions
diff --git a/src/Makefile.in b/src/Makefile.in
index 741fe4bd7..595a52505 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -30,6 +30,10 @@ ifeq (@full_xml@, true)
ERLC_FLAGS+=-DFULL_XML_SUPPORT
endif
+ifeq (@transient_supervisors@, false)
+ ERLC_FLAGS+=-DNO_TRANSIENT_SUPERVISORS
+endif
+
prefix = @prefix@
SUBDIRS = @mod_irc@ @mod_pubsub@ @mod_muc@ @mod_proxy65@ @eldap@ @web@ stringprep @tls@ @odbc@ @ejabberd_zlib@
diff --git a/src/configure b/src/configure
index f38b714e0..924c53c8a 100755
--- a/src/configure
+++ b/src/configure
@@ -310,7 +310,7 @@ ac_includes_default="\
#endif"
ac_default_prefix=/
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT SET_MAKE ERLC ac_pt_ERLC ERL ac_pt_ERL ERLANG_CFLAGS ERLANG_LIBS LIBICONV CPP EGREP EXPAT_CFLAGS EXPAT_LIBS ZLIB_CFLAGS ZLIB_LIBS LIBOBJS mod_pubsub make_mod_pubsub mod_irc make_mod_irc mod_muc make_mod_muc mod_proxy65 make_mod_proxy65 eldap make_eldap web make_web tls make_tls odbc make_odbc ejabberd_zlib make_ejabberd_zlib roster_gateway_workaround db_type full_xml SSL_LIBS SSL_CFLAGS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT SET_MAKE ERLC ac_pt_ERLC ERL ac_pt_ERL ERLANG_CFLAGS ERLANG_LIBS LIBICONV CPP EGREP EXPAT_CFLAGS EXPAT_LIBS ZLIB_CFLAGS ZLIB_LIBS LIBOBJS mod_pubsub make_mod_pubsub mod_irc make_mod_irc mod_muc make_mod_muc mod_proxy65 make_mod_proxy65 eldap make_eldap web make_web tls make_tls odbc make_odbc ejabberd_zlib make_ejabberd_zlib roster_gateway_workaround db_type transient_supervisors full_xml SSL_LIBS SSL_CFLAGS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -852,6 +852,7 @@ Optional Features:
--enable-ejabberd_zlib enable ejabberd_zlib (default: yes)
--enable-roster-gateway-workaround Turn on workaround for processing gateway subscriptions (default: no)
--enable-mssql Use Microsoft SQL Server database (default: no, requires --enable-odbc)
+ --enable-transient_supervisors Use Erlang supervision for transient process (default: yes)
--enable-full-xml Use XML features in XMPP stream (ex: CDATA) (default: no, requires XML compliant clients)
Optional Packages:
@@ -4570,6 +4571,21 @@ else
fi;
+# Check whether --enable-transient_supervisors or --disable-transient_supervisors was given.
+if test "${enable_transient_supervisors+set}" = set; then
+ enableval="$enable_transient_supervisors"
+ case "${enableval}" in
+ yes) transient_supervisors=true ;;
+ no) transient_supervisors=false ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-full-xml" >&5
+echo "$as_me: error: bad value ${enableval} for --enable-full-xml" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ transient_supervisors=true
+fi;
+
+
# Check whether --enable-full_xml or --disable-full_xml was given.
if test "${enable_full_xml+set}" = set; then
enableval="$enable_full_xml"
@@ -5685,6 +5701,7 @@ s,@ejabberd_zlib@,$ejabberd_zlib,;t t
s,@make_ejabberd_zlib@,$make_ejabberd_zlib,;t t
s,@roster_gateway_workaround@,$roster_gateway_workaround,;t t
s,@db_type@,$db_type,;t t
+s,@transient_supervisors@,$transient_supervisors,;t t
s,@full_xml@,$full_xml,;t t
s,@SSL_LIBS@,$SSL_LIBS,;t t
s,@SSL_CFLAGS@,$SSL_CFLAGS,;t t
diff --git a/src/configure.ac b/src/configure.ac
index eee5bdb4a..58aeb8dda 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -55,6 +55,15 @@ AC_ARG_ENABLE(mssql,
esac],[db_type=generic])
AC_SUBST(db_type)
+AC_ARG_ENABLE(transient_supervisors,
+[ --enable-transient_supervisors Use Erlang supervision for transient process (default: yes)],
+[case "${enableval}" in
+ yes) transient_supervisors=true ;;
+ no) transient_supervisors=false ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-full-xml) ;;
+esac],[transient_supervisors=true])
+AC_SUBST(transient_supervisors)
+
AC_ARG_ENABLE(full_xml,
[ --enable-full-xml Use XML features in XMPP stream (ex: CDATA) (default: no, requires XML compliant clients)],
[case "${enableval}" in
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 5510cdd70..73c0a438b 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -75,6 +75,15 @@
-define(FSMOPTS, []).
-endif.
+%% Module start with or without supervisor:
+-ifdef(NO_TRANSIENT_SUPERVISORS).
+-define(SUPERVISOR_START, gen_fsm:start(ejabberd_c2s, [SockData, Opts],
+ ?FSMOPTS)).
+-else.
+-define(SUPERVISOR_START, supervisor:start_child(ejabberd_c2s_sup,
+ [SockData, Opts])).
+-endif.
+
-define(STREAM_HEADER,
"<?xml version='1.0'?>"
"<stream:stream xmlns='jabber:client' "
@@ -97,7 +106,7 @@
%%% API
%%%----------------------------------------------------------------------
start(SockData, Opts) ->
- supervisor:start_child(ejabberd_c2s_sup, [SockData, Opts]).
+ ?SUPERVISOR_START.
start_link(SockData, Opts) ->
gen_fsm:start_link(ejabberd_c2s, [SockData, Opts], ?FSMOPTS).
diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl
index f3dbfa21e..5f29fdd82 100644
--- a/src/ejabberd_s2s_in.erl
+++ b/src/ejabberd_s2s_in.erl
@@ -57,6 +57,15 @@
-define(FSMOPTS, []).
-endif.
+%% Module start with or without supervisor:
+-ifdef(NO_TRANSIENT_SUPERVISORS).
+-define(SUPERVISOR_START, gen_fsm:start(ejabberd_s2s_in, [SockData, Opts],
+ ?FSMOPTS)).
+-else.
+-define(SUPERVISOR_START, supervisor:start_child(ejabberd_s2s_in_sup,
+ [SockData, Opts])).
+-endif.
+
-define(STREAM_HEADER(Version),
("<?xml version='1.0'?>"
"<stream:stream "
@@ -84,7 +93,7 @@
%%% API
%%%----------------------------------------------------------------------
start(SockData, Opts) ->
- supervisor:start_child(ejabberd_s2s_in_sup, [SockData, Opts]).
+ ?SUPERVISOR_START.
start_link(SockData, Opts) ->
gen_fsm:start_link(ejabberd_s2s_in, [SockData, Opts], ?FSMOPTS).
diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl
index 5ac0d0358..087a8d17d 100644
--- a/src/ejabberd_s2s_out.erl
+++ b/src/ejabberd_s2s_out.erl
@@ -58,6 +58,15 @@
-define(FSMOPTS, []).
-endif.
+%% Module start with or without supervisor:
+-ifdef(NO_TRANSIENT_SUPERVISORS).
+-define(SUPERVISOR_START, p1_fsm:start(ejabberd_s2s_out, [From, Host, Type],
+ ?FSMOPTS)).
+-else.
+-define(SUPERVISOR_START, supervisor:start_child(ejabberd_s2s_out_sup,
+ [From, Host, Type])).
+-endif.
+
%% Only change this value if you now what your are doing:
-define(FSMLIMITS,[]).
%% -define(FSMLIMITS, [{max_queue, 2000}]).
@@ -86,7 +95,7 @@
%%% API
%%%----------------------------------------------------------------------
start(From, Host, Type) ->
- supervisor:start_child(ejabberd_s2s_out_sup, [From, Host, Type]).
+ ?SUPERVISOR_START.
start_link(From, Host, Type) ->
p1_fsm:start_link(ejabberd_s2s_out, [From, Host, Type],
diff --git a/src/mod_muc/Makefile.in b/src/mod_muc/Makefile.in
index 6b303d702..4e5d728ea 100644
--- a/src/mod_muc/Makefile.in
+++ b/src/mod_muc/Makefile.in
@@ -15,6 +15,11 @@ ifdef debug
EFLAGS+=+debug_info
endif
+ifeq (@transient_supervisors@, false)
+ EFLAGS+=-DNO_TRANSIENT_SUPERVISORS
+endif
+
+
OBJS = \
$(OUTDIR)/mod_muc.beam \
$(OUTDIR)/mod_muc_log.beam \
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl
index fccd09cbd..7fbaf555a 100644
--- a/src/mod_muc/mod_muc_room.erl
+++ b/src/mod_muc/mod_muc_room.erl
@@ -94,16 +94,26 @@
-define(FSMOPTS, []).
-endif.
+%% Module start with or without supervisor:
+-ifdef(NO_TRANSIENT_SUPERVISORS).
+-define(SUPERVISOR_START,
+ gen_fsm:start(?MODULE, [Host, ServerHost, Access, Room, HistorySize,
+ RoomShaper, Creator, Nick, DefRoomOpts],
+ ?FSMOPTS)).
+-else.
+-define(SUPERVISOR_START,
+ Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup),
+ supervisor:start_child(
+ Supervisor, [Host, ServerHost, Access, Room, HistorySize, RoomShaper,
+ Creator, Nick, DefRoomOpts])).
+-endif.
%%%----------------------------------------------------------------------
%%% API
%%%----------------------------------------------------------------------
start(Host, ServerHost, Access, Room, HistorySize, RoomShaper,
Creator, Nick, DefRoomOpts) ->
- Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup),
- supervisor:start_child(
- Supervisor, [Host, ServerHost, Access, Room, HistorySize, RoomShaper,
- Creator, Nick, DefRoomOpts]).
+ ?SUPERVISOR_START.
start(Host, ServerHost, Access, Room, HistorySize, RoomShaper, Opts) ->
Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup),