diff options
author | Simon Rettberg | 2013-08-02 21:18:35 +0200 |
---|---|---|
committer | Simon Rettberg | 2013-08-02 21:18:35 +0200 |
commit | 61c137ab48c750faf8c5b95b61bb84adcd343913 (patch) | |
tree | 7485acd0e222e17fab7204dfa649ceeb854b0aae /src/server/uplink.c | |
parent | [SERVER] Some sanity here and there, minor fixes, trying to track down proxy ... (diff) | |
download | dnbd3-61c137ab48c750faf8c5b95b61bb84adcd343913.tar.gz dnbd3-61c137ab48c750faf8c5b95b61bb84adcd343913.tar.xz dnbd3-61c137ab48c750faf8c5b95b61bb84adcd343913.zip |
[SERVER] Fix use-after-free, improve cleanup
Diffstat (limited to 'src/server/uplink.c')
-rw-r--r-- | src/server/uplink.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/src/server/uplink.c b/src/server/uplink.c index fea48a0..4dbe75a 100644 --- a/src/server/uplink.c +++ b/src/server/uplink.c @@ -261,13 +261,10 @@ static void* uplink_mainloop(void *data) nextAltCheck = now + SERVER_RTT_DELAY_MAX; } else if ( now >= nextAltCheck ) { // It seems it's time for a check - if ( image_is_complete( link->image ) ) { + if ( image_isComplete( link->image ) ) { // Quit work if image is complete if ( spin_trylock( &link->image->lock ) == 0 ) { - if ( link->image->cache_map != NULL ) { - free( link->image->cache_map ); - link->image->cache_map = NULL; - } + image_markComplete(link->image); link->image->uplink = NULL; link->shutdown = TRUE; free( link->recvBuffer ); @@ -382,7 +379,7 @@ static void uplink_handle_receive(dnbd3_connection_t *link) memlogf( "[ERROR] lseek() failed when writing to cache for %s", link->image->path ); } else { ret = (int)write( link->image->cacheFd, link->recvBuffer, reply.size ); - if ( ret > 0 ) image_update_cachemap( link->image, start, start + ret, TRUE ); + if ( ret > 0 ) image_updateCachemap( link->image, start, start + ret, TRUE ); } // 2) Figure out which clients are interested in it struct iovec iov[2]; |