Blame SOURCES/xinetd-2.3.14-leaking-fds-2a.patch

4a9f2a
diff -Naur xinetd-2.3.14-dist/xinetd/service.c xinetd-2.3.14/xinetd/service.c
4a9f2a
--- xinetd-2.3.14-dist/xinetd/service.c	2012-04-03 08:59:19.000000000 +0200
4a9f2a
+++ xinetd-2.3.14/xinetd/service.c	2012-04-03 09:02:34.588160317 +0200
4a9f2a
@@ -366,12 +366,24 @@
4a9f2a
 
4a9f2a
       msg( LOG_ERR, func,
4a9f2a
                   "socket creation failed (%m). service = %s", SC_ID( scp ) ) ;
4a9f2a
+#ifdef HAVE_POLL
4a9f2a
+      SVC_EVENTS( sp ) = 0;
4a9f2a
+      SVC_FD( sp ) = 0;
4a9f2a
+#else
4a9f2a
+      FD_CLR( SVC_FD( sp ), &ps.rws.socket_mask ) ;
4a9f2a
+#endif /* HAVE_POLL */
4a9f2a
       return( FAILED ) ;
4a9f2a
    }
4a9f2a
 
4a9f2a
    if ( set_fd_modes( sp ) == FAILED )
4a9f2a
    {
4a9f2a
       (void) Sclose( SVC_FD(sp) ) ;
4a9f2a
+#ifdef HAVE_POLL
4a9f2a
+      SVC_EVENTS( sp ) = 0;
4a9f2a
+      SVC_FD( sp ) = 0;
4a9f2a
+#else
4a9f2a
+      FD_CLR( SVC_FD( sp ), &ps.rws.socket_mask ) ;
4a9f2a
+#endif /* HAVE_POLL */
4a9f2a
       return( FAILED ) ;
4a9f2a
    }
4a9f2a
 
4a9f2a
@@ -385,6 +397,12 @@
4a9f2a
    if ( status == FAILED )
4a9f2a
    {
4a9f2a
       (void) Sclose( SVC_FD(sp) ) ;
4a9f2a
+#ifdef HAVE_POLL
4a9f2a
+      SVC_EVENTS( sp ) = 0;
4a9f2a
+      SVC_FD( sp ) = 0;
4a9f2a
+#else
4a9f2a
+      FD_CLR( SVC_FD( sp ), &ps.rws.socket_mask ) ;
4a9f2a
+#endif /* HAVE_POLL */
4a9f2a
       return( FAILED ) ;
4a9f2a
    }
4a9f2a