[Date Prev][Date Next] [Chronological] [Thread] [Top]

slapd hang on write to wake_sds pair (ITS#383)



Full_Name: Jeff Romine
Version: devel
OS: Solaris
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (206.81.132.94)


It seems to be possible for the wake_sds socket pair to get
filled up under heavy load.  My proposed fix avoids this by
preventing more than one 1-byte message from being in the
socket-pair at any given time.  The CVS diff for daemon.c is
below:

Index: daemon.c
===================================================================
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/daemon.c,v
retrieving revision 1.124
diff -r1.124 daemon.c
47a48,49
> static int wake_listener_pending_flag = 0;
> 
49c51,55
< do { if (w) tcp_write( wake_sds[1], "0", 1 ); } while(0)
---
> do { if (w && !wake_listener_pending_flag) \
> 	{tcp_write( wake_sds[1], "0", 1 ); wake_listener_pending_flag = 1;}}
while(0)
> 
> #define LISTENER_AWAKE() \
> Debug(LDAP_DEBUG_ANY,"LISTENER_AWAKE()\n",0,0,0); wake_listener_pending_flag =
0
592a599
> 			LISTENER_AWAKE();