+ log->next = NULL;
+ log->type = type;
+ log->meta.i_object_id = item->i_object_id;
+ /* NOTE: Object types MUST be static constant - no need to copy them. */
+ log->meta.psz_object_type = item->psz_object_type;
+ log->meta.psz_module = item->psz_module; /* Ditto. */
+ log->meta.psz_header = item->psz_header ? strdup(item->psz_header) : NULL;
+ log->meta.file = item->file;
+ log->meta.line = item->line;
+ log->meta.func = item->func;
+
+ int canc = vlc_savecancel(); /* XXX: needed for vasprintf() ? */
+ if (vasprintf(&log->msg, format, ap) == -1)
+ log->msg = NULL;
+ vlc_restorecancel(canc);
+
+ vlc_mutex_lock(&sys->lock);
+ assert(sys->tailp != NULL);
+ assert(*(sys->tailp) == NULL);
+ *(sys->tailp) = log;
+ sys->tailp = &log->next;
+ vlc_mutex_unlock(&sys->lock);