libbluray | branch: master | joakim <joakim@mefx.(none)> | Mon Feb 4 23:05:28 2013 +0100| [b0a7e5a941c1bfaaab1154735a36b4b520ec300c] | committer: hpi1
maintain mutex lock order between register and player state bd_psr_write can trigger lock of bd mutex in a callback, which can already be held by other thread waiting for psr mutex. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=b0a7e5a941c1bfaaab1154735a36b4b520ec300c --- src/libbluray/bdj/native/org_videolan_Libbluray.c | 6 +++++- src/libbluray/bluray.c | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libbluray/bdj/native/org_videolan_Libbluray.c b/src/libbluray/bdj/native/org_videolan_Libbluray.c index e4fbc9e..7802f97 100644 --- a/src/libbluray/bdj/native/org_videolan_Libbluray.c +++ b/src/libbluray/bdj/native/org_videolan_Libbluray.c @@ -26,6 +26,7 @@ #include "libbluray/bluray.h" #include "libbluray/bluray_internal.h" +#include "util/mutex.h" #include "util/strutl.h" #include "util/macro.h" #include "util/logging.h" @@ -325,7 +326,10 @@ JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_readGPRN(JNIEnv * env, JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_writePSRN(JNIEnv * env, jclass cls, jlong np, jint num, jint value) { BDJAVA* bdj = (BDJAVA*)(intptr_t)np; - return bd_psr_write(bdj->reg, num, value); + bd_mutex_lock((BD_MUTEX*)bdj->bd); + int res = bd_psr_write(bdj->reg, num, value); + bd_mutex_unlock((BD_MUTEX*)bdj->bd); + return res; } JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_readPSRN(JNIEnv * env, diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 2452312..1e52181 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -109,7 +109,7 @@ typedef struct { struct bluray { - BD_MUTEX mutex; /* protect API function access to internal data */ + BD_MUTEX mutex; /* protect API function access to internal data (must be first element in struct) */ /* current disc */ char *device_path; _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
