summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>2014-04-04 12:32:14 +0100
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>2015-04-03 11:18:46 +0100
commit964ea678dafcf4c2ad022e4c6f9948e3cec902fa (patch)
tree61d5259aaac17b739413d63498ae8cdd3714aec0 /sys
parent3fd184da7811ba7073016316cfaa2d0a21d8c1c7 (diff)
downloadgst-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.c6
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);