libbluray | branch: master | hpi1 <[email protected]> | Tue Jun 11 11:29:28 
2013 +0300| [33b0b59e798d24272f69763601364980d86ebcd9] | committer: hpi1

BDRootWindow: fixed race. It was possible to execute overlay close while 
overlay update was currently running.

This resulted application callback being called from two different threads in 
paraller.
Overlay was freed while being updated by another thread, leading to random 
crashes and memory corruption.

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

 src/libbluray/bdj/java/java/awt/BDRootWindow.java |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/libbluray/bdj/java/java/awt/BDRootWindow.java 
b/src/libbluray/bdj/java/java/awt/BDRootWindow.java
index 2491e1d..b49de44 100644
--- a/src/libbluray/bdj/java/java/awt/BDRootWindow.java
+++ b/src/libbluray/bdj/java/java/awt/BDRootWindow.java
@@ -116,9 +116,11 @@ public class BDRootWindow extends Frame {
     }
 
     private void close() {
-        if (overlay_open) {
-            Libbluray.updateGraphic(0, 0, null);
-            overlay_open = false;
+        synchronized (this) {
+            if (overlay_open) {
+                Libbluray.updateGraphic(0, 0, null);
+                overlay_open = false;
+            }
         }
     }
 

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

Reply via email to