mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-30 17:49:02 +00:00
record: Use reference counting for recording
Allows to share the recording object. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
parent
e0a5e4f0d0
commit
ab6ace6b66
@ -32,6 +32,7 @@ struct RedRecord {
|
||||
FILE *fd;
|
||||
pthread_mutex_t lock;
|
||||
unsigned int counter;
|
||||
gint refs;
|
||||
};
|
||||
|
||||
#if 0
|
||||
@ -910,17 +911,25 @@ RedRecord *red_record_new(const char *filename)
|
||||
}
|
||||
|
||||
record = g_new(RedRecord, 1);
|
||||
record->refs = 1;
|
||||
record->fd = f;
|
||||
record->counter = 0;
|
||||
pthread_mutex_init(&record->lock, NULL);
|
||||
return record;
|
||||
}
|
||||
|
||||
void red_record_free(RedRecord *record)
|
||||
RedRecord *red_record_ref(RedRecord *record)
|
||||
{
|
||||
if (record) {
|
||||
fclose(record->fd);
|
||||
pthread_mutex_destroy(&record->lock);
|
||||
g_free(record);
|
||||
}
|
||||
g_atomic_int_inc(&record->refs);
|
||||
return record;
|
||||
}
|
||||
|
||||
void red_record_unref(RedRecord *record)
|
||||
{
|
||||
if (!record || !g_atomic_int_dec_and_test(&record->refs)) {
|
||||
return;
|
||||
}
|
||||
fclose(record->fd);
|
||||
pthread_mutex_destroy(&record->lock);
|
||||
g_free(record);
|
||||
}
|
||||
|
||||
@ -33,7 +33,8 @@ typedef struct RedRecord RedRecord;
|
||||
*/
|
||||
RedRecord* red_record_new(const char *filename);
|
||||
|
||||
void red_record_free(RedRecord *record);
|
||||
RedRecord *red_record_ref(RedRecord *record);
|
||||
void red_record_unref(RedRecord *record);
|
||||
|
||||
void red_record_primary_surface_create(RedRecord *record,
|
||||
QXLDevSurfaceCreate *surface,
|
||||
|
||||
@ -1457,7 +1457,7 @@ void red_worker_free(RedWorker *worker)
|
||||
g_main_context_unref(worker->core.main_context);
|
||||
|
||||
if (worker->record) {
|
||||
red_record_free(worker->record);
|
||||
red_record_unref(worker->record);
|
||||
}
|
||||
memslot_info_destroy(&worker->mem_slots);
|
||||
free(worker);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user