diff options
author | Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> | 2014-04-04 12:32:14 +0100 |
---|---|---|
committer | Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> | 2015-04-03 11:18:46 +0100 |
commit | 964ea678dafcf4c2ad022e4c6f9948e3cec902fa (patch) | |
tree | 61d5259aaac17b739413d63498ae8cdd3714aec0 /sys | |
parent | 3fd184da7811ba7073016316cfaa2d0a21d8c1c7 (diff) | |
download | gst-plugins-base-964ea678dafcf4c2ad022e4c6f9948e3cec902fa.tar.gz gst-plugins-base-964ea678dafcf4c2ad022e4c6f9948e3cec902fa.tar.xz |
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
Diffstat (limited to 'sys')
-rw-r--r-- | sys/xvimage/xvimageallocator.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/xvimage/xvimageallocator.c b/sys/xvimage/xvimageallocator.c index c14a165e8..35821836f 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); |