X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fcache.c;h=50c0f36182bbbac1d802c9fc73f07504998ee1db;hb=c0d52390142a72a89aa632172e03a3ec909890ed;hp=2c1bc92c32a39f78ad639977c916923830caf613;hpb=83fd6b61a6e092a22d4d5e59ed95f05f5e287f11;p=bluesky.git diff --git a/bluesky/cache.c b/bluesky/cache.c index 2c1bc92..50c0f36 100644 --- a/bluesky/cache.c +++ b/bluesky/cache.c @@ -163,6 +163,24 @@ static void drop_caches(BlueSkyInode *inode) { if (inode->type == BLUESKY_REGULAR) bluesky_file_drop_cached(inode); + + BlueSkyCloudLog *log = inode->committed_item; + if (log != NULL) { + g_mutex_lock(log->lock); + if (log->data != NULL + && g_atomic_int_get(&log->data_lock_count) == 0 + && (log->location_flags != 0)) + { + bluesky_cloudlog_stats_update(log, -1); + bluesky_string_unref(log->data); + log->data = NULL; + bluesky_cloudlog_stats_update(log, 1); + } + if (log->location_flags & CLOUDLOG_CLOUD) { + log->location_flags &= ~CLOUDLOG_JOURNAL; + } + g_mutex_unlock(log->lock); + } } /* Drop clean data from the cache if needed. Clean data should generally be @@ -225,6 +243,7 @@ static gpointer flushd_task(BlueSkyFS *fs) flushd_dirty(fs); flushd_cloud(fs); flushd_clean(fs); + bluesky_cachefile_gc(fs); g_mutex_unlock(fs->flushd_lock); return NULL;