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();
Howard commited a change which should resolve this problem Please test. At 09:37 PM 11/23/99 GMT, you wrote: >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(); > > > ---- Kurt D. Zeilenga <kurt@boolean.net> Net Boolean Incorporated <http://www.boolean.net/>
With the patch tested and committed in daemon.c rev 1.127, I'm closing this bug report. Also noting here that the bug was specific to a non-threaded build.
changed state Open to Closed moved from Incoming to Software Bugs