From c61f65ebd977d0fa4f1f486458655242f3aeb3e5 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 10 Jun 2020 16:01:36 +0200 Subject: [SERVER] Fix list walk when removing client from uplink --- src/server/uplink.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/server/uplink.c') diff --git a/src/server/uplink.c b/src/server/uplink.c index f5ac6ac..bf6f32e 100644 --- a/src/server/uplink.c +++ b/src/server/uplink.c @@ -235,12 +235,14 @@ void uplink_removeClient(dnbd3_uplink_t *uplink, dnbd3_client_t *client) return; mutex_lock( &uplink->queueLock ); for ( dnbd3_queue_entry_t *it = uplink->queue; it != NULL; it = it->next ) { - for ( dnbd3_queue_client_t **cit = &it->clients; *cit != NULL; cit = &(**cit).next ) { + for ( dnbd3_queue_client_t **cit = &it->clients; *cit != NULL; ) { if ( (**cit).client == client ) { --client->relayedCount; dnbd3_queue_client_t *entry = *cit; *cit = (**cit).next; free( entry ); + } else { + cit = &(**cit).next; } } } -- cgit v1.2.3-55-g7522