while (log->committed != NULL) {
BlueSkyCloudLog *item = (BlueSkyCloudLog *)log->committed->data;
g_mutex_lock(item->lock);
+ bluesky_cloudlog_stats_update(item, -1);
item->pending_write &= ~CLOUDLOG_JOURNAL;
item->location_flags |= CLOUDLOG_JOURNAL;
+ bluesky_cloudlog_stats_update(item, 1);
g_cond_signal(item->cond);
g_mutex_unlock(item->lock);
log->committed = g_slist_delete_link(log->committed, log->committed);
continue;
}
+ bluesky_cloudlog_stats_update(item, -1);
item->pending_write |= CLOUDLOG_JOURNAL;
+ bluesky_cloudlog_stats_update(item, 1);
struct log_header header;
struct log_footer footer;
offset += sizeof(header) + sizeof(footer) + item->data->len;
+ /* Replace the log item's string data with a memory-mapped copy of the
+ * data, now that it has been written to the log file. (Even if it
+ * isn't yet on disk, it should at least be in the page cache and so
+ * available to memory map.) */
+ bluesky_string_unref(item->data);
+ item->data = NULL;
+ bluesky_cloudlog_fetch(item);
+
log->committed = g_slist_prepend(log->committed, item);
g_atomic_int_add(&item->data_lock_count, -1);
g_mutex_unlock(item->lock);