libbluray | branch: master | hpi1 <[email protected]> | Mon Apr 14 11:03:52 
2014 +0300| [36f3239bf74b498e6d5cdd6c61b856f25075b491] | committer: hpi1

_update_clip_psrs(): make check + update atomic

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

 src/libbluray/bluray.c |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c
index acea045..40ba0ad 100644
--- a/src/libbluray/bluray.c
+++ b/src/libbluray/bluray.c
@@ -358,6 +358,7 @@ static void _update_clip_psrs(BLURAY *bd, NAV_CLIP *clip)
         uint32_t psr_val;
 
         if (stn->num_audio) {
+            bd_psr_lock(bd->regs);
             psr_val = bd_psr_read(bd->regs, PSR_PRIMARY_AUDIO_ID);
             if (psr_val == 0 || psr_val > stn->num_audio) {
                 _update_stream_psr_by_lang(bd->regs,
@@ -367,8 +368,10 @@ static void _update_clip_psrs(BLURAY *bd, NAV_CLIP *clip)
             } else {
                 audio_lang = str_to_uint32((const char *)stn->audio[psr_val - 
1].lang, 3);
             }
+            bd_psr_unlock(bd->regs);
         }
         if (stn->num_pg) {
+            bd_psr_lock(bd->regs);
             psr_val = bd_psr_read(bd->regs, PSR_PG_STREAM) & 0xfff;
             if ((psr_val == 0) || (psr_val > stn->num_pg)) {
                 _update_stream_psr_by_lang(bd->regs,
@@ -376,6 +379,7 @@ static void _update_clip_psrs(BLURAY *bd, NAV_CLIP *clip)
                                            stn->pg, stn->num_pg,
                                            NULL, audio_lang);
             }
+            bd_psr_unlock(bd->regs);
         }
     }
 }

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

Reply via email to