]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/main.c
Fix conversion of IDL to range
[openldap] / servers / slapd / main.c
index 1d4f2aa427e7e0c0e99cec77ddb720a685bef701..46629e73aa098ef947dc2b6a8e67a525d1b1a572 100644 (file)
@@ -368,6 +368,9 @@ int main( int argc, char **argv )
        int syslogUser = SLAP_DEFAULT_SYSLOG_USER;
 #endif
        
+#ifndef HAVE_WINSOCK
+       int pid, waitfds[2];
+#endif
        int g_argc = argc;
        char **g_argv = argv;
 
@@ -848,7 +851,7 @@ unhandled_option:;
        if( rc != 0) {
                Debug( LDAP_DEBUG_ANY,
                    "main: TLS init failed: %d\n",
-                   0, 0, 0 );
+                   rc, 0, 0 );
                rc = 1;
                SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 );
                goto destroy;
@@ -903,7 +906,24 @@ unhandled_option:;
 #endif
 
 #ifndef HAVE_WINSOCK
-       lutil_detach( no_detach, 0 );
+       if ( lutil_pair( waitfds ) < 0 ) {
+               Debug( LDAP_DEBUG_ANY,
+                       "main: lutil_pair failed: %d\n",
+                       0, 0, 0 );
+               rc = 1;
+               goto destroy;
+       }
+       pid = lutil_detach( no_detach, 0 );
+       if ( pid ) {
+               char buf[4];
+               rc = EXIT_SUCCESS;
+               close( waitfds[1] );
+               if ( read( waitfds[0], buf, 1 ) != 1 )
+                       rc = EXIT_FAILURE;
+               _exit( rc );
+       } else {
+               close( waitfds[0] );
+       }
 #endif /* HAVE_WINSOCK */
 
 #ifdef CSRIMALLOC
@@ -974,6 +994,11 @@ unhandled_option:;
 
        Debug( LDAP_DEBUG_ANY, "slapd starting\n", 0, 0, 0 );
 
+#ifndef HAVE_WINSOCK
+       write( waitfds[1], "1", 1 );
+       close( waitfds[1] );
+#endif
+
 #ifdef HAVE_NT_EVENT_LOG
        if (is_NT_Service)
        lutil_LogStartedEvent( serverName, slap_debug, configfile ?