libbluray | branch: master | hpi1 <[email protected]> | Wed Jun 19 15:05:23 
2013 +0300| [4236b5a689430d9489dbb980e1bd110146a2d162] | committer: hpi1

Added missing locking to PG decoder enable/disable

> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=4236b5a689430d9489dbb980e1bd110146a2d162
---

 src/libbluray/bluray.c |   13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c
index e13c491..bca1e48 100644
--- a/src/libbluray/bluray.c
+++ b/src/libbluray/bluray.c
@@ -2506,16 +2506,23 @@ int bd_set_player_setting(BLURAY *bd, uint32_t idx, 
uint32_t value)
     };
 
     unsigned i;
+    int result;
 
     if (idx == BLURAY_PLAYER_SETTING_DECODE_PG) {
+        bd_mutex_lock(&bd->mutex);
         bd->decode_pg = !!value;
-        value = (bd_psr_read(bd->regs, PSR_PG_STREAM) & (0x7fffffff)) | 
(value<<31);
-        return !bd_psr_setting_write(bd->regs, PSR_PG_STREAM, value);
+
+        bd_psr_lock(bd->regs);
+        value = (bd_psr_read(bd->regs, PSR_PG_STREAM) & (0x7fffffff)) | 
((!!value)<<31);
+        result = !bd_psr_setting_write(bd->regs, PSR_PG_STREAM, value);
+        bd_psr_unlock(bd->regs);
+
+        bd_mutex_unlock(&bd->mutex);
+        return result;
     }
 
     for (i = 0; i < sizeof(map) / sizeof(map[0]); i++) {
         if (idx == map[i].idx) {
-            int result;
             bd_mutex_lock(&bd->mutex);
             result = !bd_psr_setting_write(bd->regs, idx, value);
             bd_mutex_unlock(&bd->mutex);

_______________________________________________
libbluray-devel mailing list
[email protected]
http://mailman.videolan.org/listinfo/libbluray-devel

Reply via email to