From b2e57148fac2068bd2ee674d94ddd3d2cba22986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Thu, 18 Oct 2018 15:49:43 +0100 Subject: [PATCH] Shorten to one epoch per PDU A full read cycle can take a very long time if the limits are set too high. --- servers/lloadd/connection.c | 5 +++++ servers/lloadd/epoch.h | 1 + 2 files changed, 6 insertions(+) diff --git a/servers/lloadd/connection.c b/servers/lloadd/connection.c index e1b4c39019..886a2b6a83 100644 --- a/servers/lloadd/connection.c +++ b/servers/lloadd/connection.c @@ -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 ); diff --git a/servers/lloadd/epoch.h b/servers/lloadd/epoch.h index b5ae045008..89f0bc4b26 100644 --- a/servers/lloadd/epoch.h +++ b/servers/lloadd/epoch.h @@ -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 ); \