]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
Retain a reference around for handle_responses
authorOndřej Kuzník <ondra@mistotebe.net>
Tue, 9 May 2017 15:16:12 +0000 (16:16 +0100)
committerOndřej Kuzník <okuznik@symas.com>
Tue, 17 Nov 2020 17:55:46 +0000 (17:55 +0000)
servers/lloadd/upstream.c

index bd8ca8395d00ae72dccd708b22ca34ad94a77858..ebf4a176a70a6804418581620871b6574a803f4a 100644 (file)
@@ -423,7 +423,7 @@ handle_responses( void *ctx, void *arg )
     Connection *c = arg;
     int responses_handled = 0;
 
-    CONNECTION_LOCK(c);
+    CONNECTION_LOCK_DECREF(c);
     for ( ; responses_handled < slap_conn_max_pdus_per_cycle;
             responses_handled++ ) {
         BerElement *ber;
@@ -534,9 +534,12 @@ upstream_read_cb( evutil_socket_t s, short what, void *arg )
         }
         return;
     }
-    event_del( c->c_read_event );
 
-    CONNECTION_UNLOCK(c);
+    /* We have scheduled a call to handle_responses which takes care of
+     * handling further requests, just make sure the connection sticks around
+     * for that */
+    event_del( c->c_read_event );
+    CONNECTION_UNLOCK_INCREF(c);
     return;
 }