]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/daemon.c
Merged in per cache entry reader/writer locks from OPENLDAP_DEVEL_THREAD
[openldap] / servers / slapd / daemon.c
index 38062d9b2b47e1ea77a756f2d99e824963922f78..509ed6a275947cdffbc928ea375b136afcaa1daf 100644 (file)
@@ -78,16 +78,19 @@ slapd_daemon(
        int                     on = 1;
 
 #ifdef USE_SYSCONF
-        dtblsize = sysconf( _SC_OPEN_MAX );
+       dtblsize = sysconf( _SC_OPEN_MAX );
 #else /* USE_SYSCONF */
-        dtblsize = getdtablesize();
+       dtblsize = getdtablesize();
 #endif /* USE_SYSCONF */
        /*
         * Add greg@greg.rim.or.jp
         */
+#ifdef FD_SETSIZE
        if(dtblsize > FD_SETSIZE) {
                dtblsize = FD_SETSIZE;
        }
+#endif /* !FD_SETSIZE */
+
        c = (Connection *) ch_calloc( 1, dtblsize * sizeof(Connection) );
 
        for ( i = 0; i < dtblsize; i++ ) {
@@ -146,16 +149,17 @@ slapd_daemon(
        }
 
        (void) SIGNAL( SIGPIPE, SIG_IGN );
-#ifdef SIGSTKFLT
+#ifdef linux
+       /*
+        * LinuxThreads are implemented using SIGUSR1/USR2,
+        * so we'll use SIGSTKFLT and SIGUNUSED
+        */
        (void) SIGNAL( SIGSTKFLT, (void *) do_nothing );
-#else
-       (void) SIGNAL( SIGUSR1, (void *) do_nothing );
-#endif
-#ifdef SIGUNUSED
        (void) SIGNAL( SIGUNUSED, (void *) set_shutdown );
-#else
+#else /* !linux */
+       (void) SIGNAL( SIGUSR1, (void *) do_nothing );
        (void) SIGNAL( SIGUSR2, (void *) set_shutdown );
-#endif
+#endif /* !linux */
        (void) SIGNAL( SIGTERM, (void *) set_shutdown );
        (void) SIGNAL( SIGINT, (void *) set_shutdown );
        (void) SIGNAL( SIGHUP, (void *) set_shutdown );
@@ -191,6 +195,9 @@ slapd_daemon(
                FD_ZERO( &readfds );
                FD_SET( tcps, &readfds );
 
+               zero.tv_sec = 0;
+               zero.tv_usec = 0;
+
                pthread_mutex_lock( &active_threads_mutex );
                Debug( LDAP_DEBUG_CONNS,
                    "listening for connections on %d, activity on:",
@@ -211,18 +218,16 @@ slapd_daemon(
                Debug( LDAP_DEBUG_CONNS, "\n", 0, 0, 0 );
                pthread_mutex_unlock( &new_conn_mutex );
 
-               zero.tv_sec = 0;
-               zero.tv_usec = 0;
                Debug( LDAP_DEBUG_CONNS, "before select active_threads %d\n",
                    active_threads, 0, 0 );
-#ifdef PTHREAD_PREEMPTIVE
+#if    defined(PTHREAD_PREEMPTIVE) || defined(NO_THREADS)
                tvp = NULL;
 #else
                tvp = active_threads ? &zero : NULL;
 #endif
                pthread_mutex_unlock( &active_threads_mutex );
 
-               switch ( select( dtblsize, &readfds, &writefds, 0, tvp ) ) {
+               switch ( i = select( dtblsize, &readfds, &writefds, 0, tvp ) ) {
                case -1:        /* failure - try again */
                        Debug( LDAP_DEBUG_CONNS,
                            "select failed errno %d (%s)\n",
@@ -237,7 +242,7 @@ slapd_daemon(
                        continue;
 
                default:        /* something happened - deal with it */
-                       Debug( LDAP_DEBUG_CONNS, "select activity\n", 0, 0, 0 );
+                       Debug( LDAP_DEBUG_CONNS, "select activity on %d descriptors\n", i, 0, 0 );
                        ;       /* FALL */
                }
                pthread_mutex_lock( &currenttime_mutex );
@@ -417,16 +422,17 @@ set_shutdown()
 {
        Debug( LDAP_DEBUG_ANY, "slapd got shutdown signal\n", 0, 0, 0 );
        slapd_shutdown = 1;
-#ifdef SIGSTKFLT
+#ifdef linux
+       /*
+        * LinuxThreads are implemented using SIGUSR1/USR2,
+        * so we'll use SIGSTKFLT and SIGUNUSED
+        */
        pthread_kill( listener_tid, SIGSTKFLT );
-#else
-       pthread_kill( listener_tid, SIGUSR1 );
-#endif
-#ifdef SIGUNUSED
        (void) SIGNAL( SIGUNUSED, (void *) set_shutdown );
-#else
+#else /* !linux */
+       pthread_kill( listener_tid, SIGUSR1 );
        (void) SIGNAL( SIGUSR2, (void *) set_shutdown );
-#endif
+#endif /* !linux */
        (void) SIGNAL( SIGTERM, (void *) set_shutdown );
        (void) SIGNAL( SIGINT, (void *) set_shutdown );
        (void) SIGNAL( SIGHUP, (void *) set_shutdown );
@@ -436,9 +442,13 @@ static void
 do_nothing()
 {
        Debug( LDAP_DEBUG_TRACE, "slapd got do_nothing signal\n", 0, 0, 0 );
-#ifdef SIGSTKFLT
+#ifdef linux
+       /*
+        * LinuxThreads are implemented using SIGUSR1/USR2,
+        * so we'll use SIGSTKFLT and SIGUNUSED
+        */
        (void) SIGNAL( SIGSTKFLT, (void *) do_nothing );
-#else
+#else /* !linux */
        (void) SIGNAL( SIGUSR1, (void *) do_nothing );
-#endif
+#endif /* !linux */
 }