tvh_uuid_t *uuid;
char filename[PATH_MAX];
tvh_uuid_set_t set, tset;
+ int lnotify;
uuid_set_init(&set, 10);
uuid_set_init(&tset, 10);
pthread_mutex_lock(&global_lock);
while (atomic_get(&save_running)) {
- if (((ise = TAILQ_FIRST(&idnodes_save)) == NULL ||
- (ise->ise_reqtime + IDNODE_SAVE_DELAY > mclk())) &&
- uuid_set_empty(&idnode_lnotify_set) &&
- uuid_set_empty(&idnode_lnotify_title_set)) {
+ if ((ise = TAILQ_FIRST(&idnodes_save)) == NULL ||
+ ise->ise_reqtime + IDNODE_SAVE_DELAY > mclk()) {
+ pthread_mutex_lock(&idnode_lnotify_mutex);
+ lnotify = !uuid_set_empty(&idnode_lnotify_set) ||
+ !uuid_set_empty(&idnode_lnotify_title_set);
+ pthread_mutex_unlock(&idnode_lnotify_mutex);
+ if (lnotify)
+ goto lnotifygo;
if (ise)
mtimer_arm_abs(&save_timer, idnode_save_trigger_thread_cb, NULL,
ise->ise_reqtime + IDNODE_SAVE_DELAY);
}
pthread_mutex_lock(&global_lock);
}
+lnotifygo:
pthread_mutex_lock(&idnode_lnotify_mutex);
if (!uuid_set_empty(&idnode_lnotify_set)) {
set = idnode_lnotify_set;
us->us_alloc_chunk = alloc_chunk ?: 10;
}
+/* Copy uuid set */
+tvh_uuid_set_t *
+uuid_set_copy( tvh_uuid_set_t *dst, const tvh_uuid_set_t *src )
+{
+ size_t size;
+ memset(&dst, 0, sizeof(*dst));
+ dst->us_alloc_chunk = src->us_alloc_chunk;
+ size = sizeof(tvh_uuid_t) * src->us_size;
+ dst->us_array = malloc(size);
+ if (dst->us_array == NULL)
+ return NULL;
+ memcpy(dst->us_array, src->us_array, size);
+ dst->us_size = src->us_size;
+ dst->us_count = src->us_count;
+ return dst;
+}
+
/* Add an uuid to set */
tvh_uuid_t *
uuid_set_add ( tvh_uuid_set_t *us, const tvh_uuid_t *u )