From 964ea678dafcf4c2ad022e4c6f9948e3cec902fa Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Fri, 4 Apr 2014 12:32:14 +0100 Subject: [PATCH] xvimagsink: fix failure to allocate large shared memory blocks A previous patch increased allocations by 15 bytes in order to ensure 16 byte alignment for g_malloc blocks. However, shared memory is already block aligned, and this extra 15 bytes caused allocation to fail when we were already allocating to the shared memory limit, which is a lot smaller than typical available RAM. Fix this by removing the alignment slack when allocating shared memory. https://bugzilla.gnome.org/show_bug.cgi?id=706066 --- sys/xvimage/xvimageallocator.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/xvimage/xvimageallocator.c b/sys/xvimage/xvimageallocator.c index c14a165..3582183 100644 --- a/sys/xvimage/xvimageallocator.c +++ b/sys/xvimage/xvimageallocator.c @@ -346,7 +346,7 @@ gst_xvimage_allocator_alloc (GstXvImageAllocator * allocator, gint im_format, int (*handler) (Display *, XErrorEvent *); gboolean success = FALSE; GstXvContext *context; - gint align = 15, offset; + gint align, offset; GstXvImageMemory *mem; context = allocator->context; @@ -453,8 +453,9 @@ gst_xvimage_allocator_alloc (GstXvImageAllocator * allocator, gint im_format, } /* get shared memory */ + align = 0; mem->SHMInfo.shmid = - shmget (IPC_PRIVATE, mem->xvimage->data_size + align, IPC_CREAT | 0777); + shmget (IPC_PRIVATE, mem->xvimage->data_size, IPC_CREAT | 0777); if (mem->SHMInfo.shmid == -1) goto shmget_failed; @@ -489,6 +490,7 @@ gst_xvimage_allocator_alloc (GstXvImageAllocator * allocator, gint im_format, goto create_failed; /* we have to use the returned data_size for our image size */ + align = 15; /* g_malloc aligns to 8, we need 16 */ mem->xvimage->data = g_malloc (mem->xvimage->data_size + align); XSync (context->disp, FALSE); -- 2.7.4