From: Michael Vrable Date: Thu, 3 Feb 2011 00:07:58 +0000 (-0800) Subject: Fix a potential race between creating and destroying mmaped strings X-Git-Url: http://git.vrable.net/?p=bluesky.git;a=commitdiff_plain;h=8e34363f0e6859525506f435ec657259871f281f Fix a potential race between creating and destroying mmaped strings Potentially, we might try to create a new reference to a memory-mapped region while another thread unreferences and frees that region. Ensure when freeing the mapping that there really are no mappings (doube-check after taking the lock). --- diff --git a/bluesky/log.c b/bluesky/log.c index 5a16238..984cf16 100644 --- a/bluesky/log.c +++ b/bluesky/log.c @@ -751,7 +751,7 @@ void bluesky_mmap_unref(BlueSkyCacheFile *mmap) if (g_atomic_int_dec_and_test(&mmap->mapcount)) { g_mutex_lock(mmap->lock); - if (mmap->addr != NULL) { + if (mmap->addr != NULL && g_atomic_int_get(&mmap->mapcount) == 0) { if (bluesky_verbose) g_print("Unmapped log segment %d...\n", mmap->log_seq); munmap((void *)mmap->addr, mmap->len);