From: Wim Taymans Date: Fri, 19 Aug 2016 07:27:01 +0000 (+0200) Subject: fdmemory: add flag to avoid close of the fd X-Git-Tag: 1.19.3~511^2~2711 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=38622ee1e8a607beaa8d7a8e01a3524d0725041e;p=platform%2Fupstream%2Fgstreamer.git fdmemory: add flag to avoid close of the fd Add GST_FD_MEMORY_FLAG_DONT_CLOSE to avoid closing the fd when the memory is freed. When you can guarantee the lifetime of the fd is longer than the memory, this can save a dup() call. --- diff --git a/gst-libs/gst/allocators/gstfdmemory.c b/gst-libs/gst/allocators/gstfdmemory.c index 312a3d4..a15859a 100644 --- a/gst-libs/gst/allocators/gstfdmemory.c +++ b/gst-libs/gst/allocators/gstfdmemory.c @@ -65,7 +65,8 @@ gst_fd_mem_free (GstAllocator * allocator, GstMemory * gmem) munmap ((void *) mem->data, gmem->maxsize); } - if (mem->fd >= 0 && gmem->parent == NULL) + if (mem->fd >= 0 && gmem->parent == NULL + && !(mem->flags & GST_FD_MEMORY_FLAG_DONT_CLOSE)) close (mem->fd); g_mutex_clear (&mem->lock); g_slice_free (GstFdMemory, mem); @@ -245,7 +246,8 @@ gst_fd_allocator_new (void) * Return a %GstMemory that wraps a generic file descriptor. * * Returns: (transfer full): a GstMemory based on @allocator. - * When the buffer will be released the allocator will close the @fd. + * When the buffer will be released the allocator will close the @fd unless + * the %GST_FD_MEMORY_FLAG_DONT_CLOSE flag is specified. * The memory is only mmapped on gst_buffer_mmap() request. * * Since: 1.6 diff --git a/gst-libs/gst/allocators/gstfdmemory.h b/gst-libs/gst/allocators/gstfdmemory.h index 75efae2..40c90d0 100644 --- a/gst-libs/gst/allocators/gstfdmemory.h +++ b/gst-libs/gst/allocators/gstfdmemory.h @@ -45,6 +45,8 @@ typedef struct _GstFdAllocatorClass GstFdAllocatorClass; * keep it mapped until the memory is destroyed. * @GST_FD_MEMORY_FLAG_MAP_PRIVATE: do a private mapping instead of * the default shared mapping. + * @GST_FD_MEMORY_FLAG_DONT_CLOSE: don't close the file descriptor when + * the memory is freed. Since: 1.10. * * Various flags to control the operation of the fd backed memory. * @@ -54,6 +56,7 @@ typedef enum { GST_FD_MEMORY_FLAG_NONE = 0, GST_FD_MEMORY_FLAG_KEEP_MAPPED = (1 << 0), GST_FD_MEMORY_FLAG_MAP_PRIVATE = (1 << 1), + GST_FD_MEMORY_FLAG_DONT_CLOSE = (1 << 2), } GstFdMemoryFlags; /**