From 74ce64ad788921b1db9d9ebee0562db57caa95e7 Mon Sep 17 00:00:00 2001 From: Sunita Nadampalli Date: Fri, 30 Jan 2015 10:17:17 -0600 Subject: libdce: Add mutex protection for dce_buf_lock/dce_buf_unlock The dce_buf_lock and dce_buf_unlock are meant for any video buffer locking and unlocking with the GEM allocator. Currently, these methods are being called from libdce apis with ipc mutex held. In order to enable other media components to make use of these buffer lock/unlock apis, explicit ipc mutex protection is added. Change-Id: I6d63a4cdcffec62a346341ff515a7ebb03dea8c0 Signed-off-by: Sunita Nadampalli --- libdce.c | 2 +- libdce_android.c | 11 +++++++++++ memplugin_android.c | 7 ++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/libdce.c b/libdce.c index 6b664bd..881516e 100644 --- a/libdce.c +++ b/libdce.c @@ -50,7 +50,7 @@ /* Handle used for Remote Communication */ MmRpc_Handle MmRpcHandle[MAX_REMOTEDEVICES] = { NULL}; Engine_Handle gEngineHandle[MAX_INSTANCES][MAX_REMOTEDEVICES] = { {NULL, NULL}}; -static pthread_mutex_t ipc_mutex = PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t ipc_mutex = PTHREAD_MUTEX_INITIALIZER; static int __ClientCount[MAX_REMOTEDEVICES] = {0}; int dce_debug = DCE_DEBUG_LEVEL; const String DCE_DEVICE_NAME[MAX_REMOTEDEVICES]= {"rpmsg-dce","rpmsg-dce-dsp"}; diff --git a/libdce_android.c b/libdce_android.c index 300c311..9480926 100644 --- a/libdce_android.c +++ b/libdce_android.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "dce_priv.h" @@ -42,6 +43,7 @@ extern MmRpc_Handle MmRpcHandle[]; +extern pthread_mutex_t ipc_mutex; int dce_buf_lock(int num, size_t *handle) { @@ -49,6 +51,8 @@ int dce_buf_lock(int num, size_t *handle) MmRpc_BufDesc *desc = NULL; dce_error_status eError = DCE_EOK; + pthread_mutex_lock(&ipc_mutex); + _ASSERT(num > 0, DCE_EINVALID_INPUT); desc = malloc(num * sizeof(MmRpc_BufDesc)); @@ -65,6 +69,8 @@ EXIT: if( desc ) { free(desc); } + pthread_mutex_unlock(&ipc_mutex); + return (eError); } @@ -74,6 +80,8 @@ int dce_buf_unlock(int num, size_t *handle) MmRpc_BufDesc *desc = NULL; dce_error_status eError = DCE_EOK; + pthread_mutex_lock(&ipc_mutex); + _ASSERT(num > 0, DCE_EINVALID_INPUT); desc = malloc(num * sizeof(MmRpc_BufDesc)); @@ -90,6 +98,9 @@ EXIT: if( desc ) { free(desc); } + + pthread_mutex_unlock(&ipc_mutex); + return (eError); } diff --git a/memplugin_android.c b/memplugin_android.c index d2f5b35..307dc9e 100644 --- a/memplugin_android.c +++ b/memplugin_android.c @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include "memplugin.h" #include "libdce.h" @@ -50,6 +50,7 @@ int OmapDrm_FD = INVALID_DRM_FD; struct omap_device *OmapDev = NULL; +extern pthread_mutex_t ipc_mutex; int memplugin_open() { @@ -70,6 +71,10 @@ int memplugin_open() return MEM_EOPEN_FAILURE; } + pthread_mutexattr_t attr; + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&ipc_mutex, &attr); + if (dce_ipc_init(IPU) != MEM_EOK) { omap_device_del(OmapDev); OmapDev = NULL; -- cgit v1.2.3-54-g00ecf