From 4e3d058edb6ff889a59c67c2c06be41657973e8f Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 27 Jan 2015 19:41:49 +0100 Subject: [SERVER] Also fix fd leak if uplink_init fails --- src/server/image.c | 2 +- src/server/uplink.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/image.c b/src/server/image.c index d8c7113..d20a149 100644 --- a/src/server/image.c +++ b/src/server/image.c @@ -943,7 +943,7 @@ dnbd3_image_t* image_getOrClone(char *name, uint16_t revision) image = image_get( name, remoteRid, false ); if ( image != NULL && uplinkSock != -1 && uplinkServer != NULL ) { // If so, init the uplink and pass it the socket - uplink_init( image, uplinkSock, uplinkServer ); + if ( !uplink_init( image, uplinkSock, uplinkServer ) ) close( uplinkSock ); i = 0; while ( !image->working && ++i < 100 ) usleep( 1000 ); diff --git a/src/server/uplink.c b/src/server/uplink.c index fdc4b27..dea0298 100644 --- a/src/server/uplink.c +++ b/src/server/uplink.c @@ -44,6 +44,7 @@ bool uplink_init(dnbd3_image_t *image, int sock, dnbd3_host_t *host) spin_lock( &image->lock ); if ( image->uplink != NULL ) { spin_unlock( &image->lock ); + if ( sock >= 0 ) close( sock ); return true; // There's already an uplink, so should we consider this success or failure? } if ( image->cache_map == NULL ) { -- cgit v1.2.3-55-g7522