From d1841b5c1f5a4a7addc1241ef6972e333e32a6df Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 2 Dec 1999 03:45:54 +0000 Subject: [PATCH] Fix WAKE_LISTENER hang in single-threaded server --- servers/slapd/daemon.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index b88f1e2b9a..823e6bd0b3 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -45,8 +45,14 @@ Listener **slap_listeners = NULL; static ber_socket_t wake_sds[2]; +#ifdef NO_THREADS +static int waking; +#define WAKE_LISTENER(w) \ +((w && !waking) ? tcp_write( wake_sds[1], "0", 1 ), waking=1 : 0) +#else #define WAKE_LISTENER(w) \ do { if (w) tcp_write( wake_sds[1], "0", 1 ); } while(0) +#endif #ifdef HAVE_NT_SERVICE_MANAGER /* in nt_main.c */ @@ -594,6 +600,9 @@ slapd_daemon_task( if( FD_ISSET( wake_sds[0], &readfds ) ) { char c[BUFSIZ]; tcp_read( wake_sds[0], c, sizeof(c) ); +#ifdef NO_THREADS + waking = 0; +#endif continue; } -- 2.39.5