]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9338 Make sure connection gets rescheduled after write blockage clears up
authorHoward Chu <hyc@openldap.org>
Fri, 4 Sep 2020 13:28:44 +0000 (14:28 +0100)
committerHoward Chu <hyc@openldap.org>
Fri, 4 Sep 2020 17:22:40 +0000 (18:22 +0100)
servers/slapd/result.c

index d54b4f503c34e561cefdc4833915911881cf9c42..3e00d6f61ef1daab3ef1e5946944ed4f79576f12 100644 (file)
@@ -409,7 +409,6 @@ fail:
                ldap_pvt_thread_pool_idle( &connection_pool );
                slap_writewait_play( op );
                err = slapd_wait_writer( conn->c_sd );
-               conn->c_writewaiter = 0;
                ldap_pvt_thread_pool_unidle( &connection_pool );
                ldap_pvt_thread_mutex_lock( &conn->c_write1_mutex );
                /* 0 is timeout, so we close it.
@@ -420,9 +419,14 @@ fail:
                                close_reason = "writetimeout";
                        else
                                close_reason = "connection lost on writewait";
+                       conn->c_writewaiter = 0;
                        goto fail;
                }
 
+               /* Resched connection if there are pending ops */
+               connection_write( conn->c_sd );
+               conn->c_writewaiter = 0;
+
                if ( conn->c_writers < 0 ) {
                        ret = 0;
                        break;