summaryrefslogtreecommitdiffstats
path: root/src/server/uplink.c
diff options
context:
space:
mode:
authorSimon Rettberg2013-08-02 21:18:35 +0200
committerSimon Rettberg2013-08-02 21:18:35 +0200
commit61c137ab48c750faf8c5b95b61bb84adcd343913 (patch)
tree7485acd0e222e17fab7204dfa649ceeb854b0aae /src/server/uplink.c
parent[SERVER] Some sanity here and there, minor fixes, trying to track down proxy ... (diff)
downloaddnbd3-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.c9
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];