]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
Shorten to one epoch per PDU
authorOndřej Kuzník <okuznik@symas.com>
Thu, 18 Oct 2018 14:49:43 +0000 (15:49 +0100)
committerOndřej Kuzník <okuznik@symas.com>
Tue, 17 Nov 2020 17:58:15 +0000 (17:58 +0000)
A full read cycle can take a very long time if the limits are set too
high.

servers/lloadd/connection.c
servers/lloadd/epoch.h

index e1b4c39019c8db64c44d62054df781dd1806c9b5..886a2b6a83079855fde49b60a24fba7700b13c8d 100644 (file)
@@ -128,6 +128,11 @@ handle_pdus( void *ctx, void *arg )
             }
             break;
         }
+
+        assert( IS_ALIVE( c, c_refcnt ) );
+        epoch_leave( epoch );
+        epoch = epoch_join();
+        assert( IS_ALIVE( c, c_refcnt ) );
     }
 
     event_add( c->c_read_event, c->c_read_timeout );
index b5ae0450087e90e9b499e64cc30835b1bc5dac7a..89f0bc4b260bd32dc1b568227e51638761edfb7c 100644 (file)
@@ -132,6 +132,7 @@ int try_release_ref( uintptr_t *refp, void *object, dispose_cb *cb );
  */
 #define RELEASE_REF( object, ref_field, cb ) \
     do { \
+        assert( IS_ALIVE( (object), ref_field ) ); \
         if ( !__atomic_sub_fetch( \
                      &(object)->ref_field, 1, __ATOMIC_ACQ_REL ) ) { \
             epoch_append( object, (dispose_cb *)cb ); \