Allows to share the recording object. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/red-record-qxl.c | 19 ++++++++++++++----- server/red-record-qxl.h | 3 ++- server/red-worker.c | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/server/red-record-qxl.c b/server/red-record-qxl.c index be6ac5a..e687c68 100644 --- a/server/red-record-qxl.c +++ b/server/red-record-qxl.c @@ -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); } diff --git a/server/red-record-qxl.h b/server/red-record-qxl.h index 0685393..293e24a 100644 --- a/server/red-record-qxl.h +++ b/server/red-record-qxl.h @@ -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, diff --git a/server/red-worker.c b/server/red-worker.c index 8735cd1..93cb615 100644 --- a/server/red-worker.c +++ b/server/red-worker.c @@ -1461,7 +1461,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); -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel