diff options
author | Simon Rettberg | 2020-06-10 16:01:36 +0200 |
---|---|---|
committer | Simon Rettberg | 2020-06-10 16:01:36 +0200 |
commit | c61f65ebd977d0fa4f1f486458655242f3aeb3e5 (patch) | |
tree | 174a6ede448819c2f889683302ac06a53c5c039d /src | |
parent | [SERVER] fix uninitialized variable (diff) | |
download | dnbd3-c61f65ebd977d0fa4f1f486458655242f3aeb3e5.tar.gz dnbd3-c61f65ebd977d0fa4f1f486458655242f3aeb3e5.tar.xz dnbd3-c61f65ebd977d0fa4f1f486458655242f3aeb3e5.zip |
[SERVER] Fix list walk when removing client from uplink
Diffstat (limited to 'src')
-rw-r--r-- | src/server/uplink.c | 4 |
1 files changed, 3 insertions, 1 deletions
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; } } } |