Acked-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> On Thu, 2017-03-02 at 10:38 +0000, Frediano Ziglio wrote: > 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); _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel