Hello community, here is the log from the commit of package xinetd for openSUSE:Factory checked in at 2011-11-18 15:48:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xinetd (Old) and /work/SRC/openSUSE:Factory/.xinetd.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xinetd", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:Factory/xinetd/xinetd.changes 2011-09-23 12:51:41.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.xinetd.new/xinetd.changes 2011-11-18 15:48:23.000000000 +0100 @@ -1,0 +2,6 @@ +Thu Nov 17 20:13:51 UTC 2011 - [email protected] + +- added xinetd-2.3.14-nodeadlock-revisited.patch: ignore SIGCONT + and avoid print in signal handler (bnc#726737) + +------------------------------------------------------------------- New: ---- xinetd-2.3.14-nodeadlock-revisited.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xinetd.spec ++++++ --- /var/tmp/diff_new_pack.4LXiYp/_old 2011-11-18 15:48:27.000000000 +0100 +++ /var/tmp/diff_new_pack.4LXiYp/_new 2011-11-18 15:48:27.000000000 +0100 @@ -1,7 +1,7 @@ # -# spec file for package xinetd (Version 2.3.14) +# spec file for package xinetd # -# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -45,6 +45,7 @@ Patch9: %{name}-%{version}-ipv6-ipv4-fallback.patch Patch10: %{name}-%{version}-honour_disable.patch Patch11: %{name}-%{version}-ident-bind.patch +Patch12: %{name}-%{version}-nodeadlock-revisited.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -78,6 +79,7 @@ %patch9 %patch10 %patch11 -p1 +%patch12 -p1 %build %{suse_update_config} ++++++ xinetd-2.3.14-ident-bind.patch ++++++ --- /var/tmp/diff_new_pack.4LXiYp/_old 2011-11-18 15:48:27.000000000 +0100 +++ /var/tmp/diff_new_pack.4LXiYp/_new 2011-11-18 15:48:27.000000000 +0100 @@ -7,10 +7,11 @@ Author: Jan Safranek <[email protected]> Reviewed-By: Adam Tkac <[email protected]> -diff -up xinetd-2.3.14/xinetd/ident.c.orig xinetd-2.3.14/xinetd/ident.c ---- xinetd-2.3.14/xinetd/ident.c.orig 2008-05-29 16:30:19.000000000 +0200 -+++ xinetd-2.3.14/xinetd/ident.c 2008-05-29 16:29:57.000000000 +0200 -@@ -97,7 +98,13 @@ idresult_e log_remote_user( const struct +Index: xinetd-2.3.14/xinetd/ident.c +=================================================================== +--- xinetd-2.3.14.orig/xinetd/ident.c ++++ xinetd-2.3.14/xinetd/ident.c +@@ -97,7 +97,13 @@ idresult_e log_remote_user( const struct } CLEAR( sin_contact ); @@ -25,13 +26,13 @@ sin_contact = sin_remote; memcpy( &sin_bind, &sin_local, sizeof(sin_bind) ) ; local_port = 0; -@@ -121,7 +128,13 @@ idresult_e log_remote_user( const struct +@@ -127,7 +133,13 @@ idresult_e log_remote_user( const struct msg( LOG_ERR, func, "socket creation: %m" ) ; return( IDR_ERROR ) ; } - if ( bind(sd, &sin_bind.sa, sizeof(sin_bind.sa)) == -1 ) + -+ if ( sin_bind.sa.sa_family == AF_INET ) ++ if ( sin_bind.sa.sa_family == AF_INET ) + sin_len = sizeof( sin_bind.sa_in ) ; + else + sin_len = sizeof( sin_bind.sa_in6 ) ; ++++++ xinetd-2.3.14-nodeadlock-revisited.patch ++++++ From: Leonardo Chiquitto <[email protected]> Subject: Prevent dead locks in the signal handler References: bnc#726737 A signal can interrupt xinetd when it's printing / logging. Currently, the generic signal handler tries to print something as well (the "Unexpected signal" message), but to do that it needs a lock that xinetd already holds, deadlocking. We really can't print anything in the signal handler if the process is supposed to continue running. This patch is not perfect but it avoids the most common cases by no longer catching SIGCONT and no longer printing the "Unexpected signal" message in the generic signal handler. --- xinetd/signals.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) Index: xinetd-2.3.14/xinetd/signals.c =================================================================== --- xinetd-2.3.14.orig/xinetd/signals.c +++ xinetd-2.3.14/xinetd/signals.c @@ -186,6 +186,8 @@ static status_e handle_signal( int sig ) return( OK ) ; /* FALL THROUGH */ + case SIGCONT: + /* FALL THROUGH */ /* * We may receive a SIGPIPE when handling an internal stream * service and the other end closes the connection. @@ -395,7 +397,11 @@ static void general_handler( int sig ) break ; default: - msg( LOG_NOTICE, func, "Unexpected signal %s", sig_name( sig ) ) ; + /* This will cause a dead lock if the signal happens when the + * daemon is writing / logging something. The message is not + * important, so comment it out. + */ + // msg( LOG_NOTICE, func, "Unexpected signal %s", sig_name( sig ) ) ; if ( debug.on && sig == SIGINT ) exit( 1 ) ; } -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
