From 9f496af46bfef5bf38079b075119a9fb1b078e2c Mon Sep 17 00:00:00 2001 From: Godzil Date: Tue, 10 Jul 2012 14:06:27 +0200 Subject: [PATCH] Correct fusd_destroy to lock and check before freeing. --- libfusd/libfusd.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/libfusd/libfusd.c b/libfusd/libfusd.c index b4c53a7..6a80bd2 100755 --- a/libfusd/libfusd.c +++ b/libfusd/libfusd.c @@ -650,13 +650,26 @@ void fusd_dispatch(int fd) */ void fusd_destroy(struct fusd_file_info *file) { - if (file == NULL) - return; + if (file == NULL) + return; - if (file->fusd_msg->data != NULL) - free(file->fusd_msg->data); - free(file->fusd_msg); - free(file); + FILE_LOCK(file); + + if (file->fusd_msg != NULL) + { + if (file->fusd_msg->data != NULL) + { + free(file->fusd_msg->data); + file->fusd_msg->data = NULL; + } + free(file->fusd_msg); + file->fusd_msg = NULL; + } + FILE_UNLOCK(file); + + pthread_mutex_destroy(&file->lock); + + free(file); }