<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>572</bug_id>
          
          <creation_ts>2012-04-02 17:15:45 +0200</creation_ts>
          <short_desc>Calling invoke(true,GLRunnable) on several GLCanvases in the same container causes a deadlock</short_desc>
          <delta_ts>2012-10-05 22:02:49 +0200</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>core</component>
          <version>2</version>
          <rep_platform>pc_all</rep_platform>
          <op_sys>linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>---</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Gouesse">gouessej</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          <cc>gouessej</cc>
    
    <cc>sgothel</cc>
          
          <cf_type>---</cf_type>
          <cf_scm_refs>jogl c066dc997646643a98c35b7c70183930284544d1
jogl a3cb6bb14f410f67fccf5ccd4cd7ecc66f448389</cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1519</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-02 17:15:45 +0200</bug_when>
    <thetext>Lots of people get the following exception when creating a GLCanvas under Windows on a lot of NVIDIA graphics cards including Quadro 1000M and GT 330M:
Exception in thread &quot;main&quot; javax.media.opengl.GLException: Unable to create temp OpenGL context for device context 0x760117f6
at jogamp.opengl.windows.wgl.WindowsWGLContext.createImpl(WindowsWGLContext.java:293)
at jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:505)
at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:424)
at com.ardor3d.framework.jogl.JoglCanvasRenderer.init(JoglCanvasRenderer.java:130)
at com.ardor3d.framework.jogl.JoglAwtCanvas.init(JoglAwtCanvas.java:53)
at com.ardor3d.framework.jogl.JoglAwtCanvas.draw(JoglAwtCanvas.java:59)
at com.ardor3d.framework.FrameHandler.updateFrame(FrameHandler.java:90)
at com.ardor3d.example.canvas.JoglAwtExample.main(JoglAwtExample.java:132)

This bug is reproducible with JOGL 2.0 build 724.

Using a GLJPanel is sometimes enough to work around it but sometimes, it causes this:
Exception in thread &quot;main&quot; javax.media.opengl.GLException: Error: attempted to make an external GLContext without a context current, werr 0
at jogamp.opengl.windows.wgl.WindowsExternalWGLContext.create(WindowsExternalWGLContext.java:80)
at jogamp.opengl.windows.wgl.WindowsWGLDrawableFactory.createExternalGLContextImpl(WindowsWGLDrawableFactory.java:531)
at jogamp.opengl.GLDrawableFactoryImpl.createExternalGLContext(GLDrawableFactoryImpl.java:312)
at com.ardor3d.framework.jogl.JoglCanvasRenderer.init(JoglCanvasRenderer.java:127)
at com.ardor3d.framework.jogl.JoglAwtCanvas.init(JoglAwtCanvas.java:55)
at com.ardor3d.framework.jogl.JoglAwtCanvas.draw(JoglAwtCanvas.java:61)
at com.ardor3d.framework.FrameHandler.updateFrame(FrameHandler.java:90)
at com.ardor3d.example.canvas.JoglAwtExample.main(JoglAwtExample.java:132)

I thought it was a bug in my own source code but the same code works fine on other operating systems and under Windows but with other graphics cards and I noticed several other people had the same problem without using Ardor3D:
http://forum.jogamp.org/Unable-to-create-temp-OpenGL-context-for-device-context-tp3089571p3089571.html

Someone posted his logs here:
http://pastebin.com/raw.php?i=i7QHtNuL

I will try to provide a small test case as soon as possible.

N.B: Maybe this problem has something to do with Optimus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520</commentid>
    <comment_count>1</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-02 17:25:43 +0200</bug_when>
    <thetext>It is reproducible on this machine:

MS Win XP
Pro x64 Ed
Vr 2003
SP 2
Intel Core i3-2100 cpu @3.10GHz

NVIDIA Quadro FX 1400
Driver Version 6.14.12.7628</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527</commentid>
    <comment_count>2</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-13 13:30:58 +0200</bug_when>
    <thetext>Hi

Actually, the original bug was caused by two bugs, one in my source code in Ardor3D&apos;s renderer based on JOGL 2.0, one in JOGL 2.0 itself.

When using GLCanvas, the creation of the context fails if it is not performed on the OpenGL thread (AWT EDT by default) and the further successive OpenGL calls do not work fine if they are not done on the same thread too under Windows with some Nvidia graphics cards. I fixed this bug in Ardor3D by using GLCanvas.invoke(true, GLRunnable) to create the context and to perform all OpenGL calls. It works fine when a single GLCanvas is in a container (java.awt.Frame).

However, there is a deadlock as soon as several GLCanvases are in the same container and it occurs everywhere, not only under Windows. It stays blocked on a call of JAWTUtil.lockToolkit() when pushing the runnable that makes current the context of the second GLCanvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1533</commentid>
    <comment_count>3</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-04-17 10:27:31 +0200</bug_when>
    <thetext>(In reply to comment #2)
&gt; Hi
&gt; 
&gt; Actually, the original bug was caused by two bugs, one in my source code in
&gt; Ardor3D&apos;s renderer based on JOGL 2.0, one in JOGL 2.0 itself.
&gt; 
&gt; When using GLCanvas, the creation of the context fails if it is not performed
&gt; on the OpenGL thread (AWT EDT by default) and the further successive OpenGL
&gt; calls do not work fine if they are not done on the same thread too under
&gt; Windows with some Nvidia graphics cards. 

In the pastebin post I read that the initialization, adding the GLCanvas, setVisible(true),
is not done on the AWT-EDT. Even thought this shall be tolerated .. it&apos;s not perfectly clean.

&gt; I fixed this bug in Ardor3D by using
&gt; GLCanvas.invoke(true, GLRunnable) to create the context and to perform all
&gt; OpenGL calls. It works fine when a single GLCanvas is in a container
&gt; (java.awt.Frame).

Using invoke for every single frame (maybe even multiple times) IMHO is overkill,
since it creates an object on the fly and risks fluent processing due to GC behavior etc.
However, it should work ..

&gt; 
&gt; However, there is a deadlock as soon as several GLCanvases are in the same
&gt; container and it occurs everywhere, not only under Windows. It stays blocked on
&gt; a call of JAWTUtil.lockToolkit() when pushing the runnable that makes current
&gt; the context of the second GLCanvas.

Can you produce a small test case for this, since it is impossible
to see where your GLRunnable is claiming the AWT lock etc ..
Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534</commentid>
    <comment_count>4</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-17 12:03:58 +0200</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Hi
&gt; &gt; 
&gt; &gt; Actually, the original bug was caused by two bugs, one in my source code in
&gt; &gt; Ardor3D&apos;s renderer based on JOGL 2.0, one in JOGL 2.0 itself.
&gt; &gt; 
&gt; &gt; When using GLCanvas, the creation of the context fails if it is not performed
&gt; &gt; on the OpenGL thread (AWT EDT by default) and the further successive OpenGL
&gt; &gt; calls do not work fine if they are not done on the same thread too under
&gt; &gt; Windows with some Nvidia graphics cards. 
&gt; 
&gt; In the pastebin post I read that the initialization, adding the GLCanvas,
&gt; setVisible(true),
&gt; is not done on the AWT-EDT. Even thought this shall be tolerated .. it&apos;s not
&gt; perfectly clean.
&gt; 
Ok I&apos;ll use invokeAndWait to do it.


&gt; &gt; I fixed this bug in Ardor3D by using
&gt; &gt; GLCanvas.invoke(true, GLRunnable) to create the context and to perform all
&gt; &gt; OpenGL calls. It works fine when a single GLCanvas is in a container
&gt; &gt; (java.awt.Frame).
&gt; 
&gt; Using invoke for every single frame (maybe even multiple times) IMHO is
&gt; overkill,
&gt; since it creates an object on the fly and risks fluent processing due to GC
&gt; behavior etc.
&gt; However, it should work ..
&gt; 
I create a GLRunnable for drawing once only. Can it still cause a problem due to GC behavior? Do you have another solution to suggest? 

&gt; &gt; 
&gt; &gt; However, there is a deadlock as soon as several GLCanvases are in the same
&gt; &gt; container and it occurs everywhere, not only under Windows. It stays blocked on
&gt; &gt; a call of JAWTUtil.lockToolkit() when pushing the runnable that makes current
&gt; &gt; the context of the second GLCanvas.
&gt; 
&gt; Can you produce a small test case for this, since it is impossible
&gt; to see where your GLRunnable is claiming the AWT lock etc ..
&gt; Thank you.
Ok I&apos;ll do so as soon as possible. The GLRunnable seems to be stuck when creating a second context. Is there a similar example in NEWT in its JUnit tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538</commentid>
    <comment_count>5</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-04-17 17:48:24 +0200</bug_when>
    <thetext>&gt; &gt; Using invoke for every single frame (maybe even multiple times) IMHO is
&gt; &gt; overkill,
&gt; &gt; since it creates an object on the fly and risks fluent processing due to GC
&gt; &gt; behavior etc.
&gt; &gt; However, it should work ..
&gt; &gt; 
&gt; I create a GLRunnable for drawing once only. Can it still cause a problem due
&gt; to GC behavior? Do you have another solution to suggest? 

You mean once per frame ?
Even though the GC shall be capable of doing so on desktop,
on mobile it&apos;s always a gamble .. but 10-60 temporary objects a second 
should be fine - maybe you even &apos;cache&apos; those object in which case
no GC trigger would exist at all.

But if using this mechanism for frame rendering, 
why not using the listener model ?

I introduced the GLRunnable to inject some event based GL commands
usually not happening too frequently.

However you like to do it (cached GLRunnable or listener or your own &apos;loop&apos;)
it should work .. and is only a side discussion here, granted!

&gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; However, there is a deadlock as soon as several GLCanvases are in the same
&gt; &gt; &gt; container and it occurs everywhere, not only under Windows. It stays blocked on
&gt; &gt; &gt; a call of JAWTUtil.lockToolkit() when pushing the runnable that makes current
&gt; &gt; &gt; the context of the second GLCanvas.
&gt; &gt; 
&gt; &gt; Can you produce a small test case for this, since it is impossible
&gt; &gt; to see where your GLRunnable is claiming the AWT lock etc ..
&gt; &gt; Thank you.
&gt; Ok I&apos;ll do so as soon as possible. The GLRunnable seems to be stuck when
&gt; creating a second context. Is there a similar example in NEWT in its JUnit
&gt; tests?

I assume a shared GLContext from within a GLRunnable ?

Here are some simple GLRunnable use cases ..

src/test/com/jogamp/opengl/test/junit/graph/demos/ui/SceneUIController.java
src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIListenerBase01.java
src/test/com/jogamp/opengl/test/junit/graph/demos/GPURendererListenerBase01.java
src/test/com/jogamp/opengl/test/junit/graph/demos/GPUUISceneGLListener0A.java
src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLDebug01NEWT.java
src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java
src/test/com/jogamp/opengl/test/junit/newt/parenting/GLRunnableDummy.java
src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParenting01cSwingAWT.java

Lately I ran into some &apos;chicken-egg&apos; problem myself,
i.e. creating a new shared context:

src/test/com/jogamp/opengl/test/android/MovieSimpleActivity1.java

It uses NEWT and runs on Android. GLRunnable solves the lifecycle issue
of creating a 2nd GLMoviePlayer with information of the 1st one
with information only available after the 1st player initialized itself.
Since the latter is only possible w/ an initialized GLContext .. :)
This API restriction in GLMediaPlayer I had to add due to some .. bugs 
with Tegra/Android .. yeah, sometime it&apos;s all a big compromise :)

Would be great if your can provide a use case, so I can reproduce and 
hopefully fix it.

Laters, .. Sven</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1539</commentid>
    <comment_count>6</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-04-17 18:07:41 +0200</bug_when>
    <thetext>I get a hunch what could happen .. hmm.

Even though it would be best to have a test case,
can you provide a complete trace dump of the case 
when it deadlocks with the following flags:

-Dnativewindow.debug.ToolkitLock.TraceLock
-Djogamp.common.utils.locks.Lock.timeout=600000 
-Djogamp.debug.Lock 
-Djogamp.debug.Lock.TraceLock

1) The increased timeout value (default 5s) to gain the lock
would allow you to properly create a stack trace via
  jstack -l &lt;pid&gt;

Please provide the log file and the stack trace.

2) Then pls provide a log file w/ the normal timeout of 5s
but the other debug flags intact.

This shall at least disclose the thread sitting on the lock.

It might be the case where:

T1: AWT-EDT: - execute GLRunnable
                        - create resources while &apos;spawn off&apos; to T2
T2: - attempt to create GLContext on T1 (AWT) 
         *but it&apos;s locked already* and we came &apos;from their&apos;.

?

Thx .. cheers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1540</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-17 19:03:38 +0200</bug_when>
    <thetext>2012-04-17 19:02:17
Full thread dump OpenJDK Client VM (20.0-b11 mixed mode):

&quot;Attach Listener&quot; daemon prio=10 tid=0x8c9f4400 nid=0x300c runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

&quot;com.google.common.base.internal.Finalizer&quot; daemon prio=10 tid=0x8f3ea000 nid=0x2fd9 in Object.wait() [0x8d143000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0x9b408290&gt; (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
        - locked &lt;0x9b408290&gt; (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
        at com.google.common.base.internal.Finalizer.run(Finalizer.java:127)

   Locked ownable synchronizers:
        - None

&quot;AWT-EventQueue-0&quot; prio=10 tid=0x8c9bc800 nid=0x2fd7 in Object.wait() [0x8f696000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0x9b1bc9e0&gt; (a java.awt.EventQueue)
        at java.lang.Object.wait(Object.java:502)
        at java.awt.EventQueue.getNextEvent(EventQueue.java:490)
        - locked &lt;0x9b1bc9e0&gt; (a java.awt.EventQueue)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:247)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

   Locked ownable synchronizers:
        - &lt;0x9b1630c8&gt; (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
        - &lt;0x9b2ab790&gt; (a jogamp.common.util.locks.RecursiveLockImpl01Unfairish$SingleThreadSync)
        - &lt;0x9b2ac370&gt; (a jogamp.common.util.locks.RecursiveLockImpl01Unfairish$SingleThreadSync)

&quot;AWT-Shutdown&quot; prio=10 tid=0x8f33f000 nid=0x2fd5 in Object.wait() [0x8f77d000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0x9b21ca98&gt; (a java.lang.Object)
        at java.lang.Object.wait(Object.java:502)
        at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:281)
        - locked &lt;0x9b21ca98&gt; (a java.lang.Object)
        at java.lang.Thread.run(Thread.java:679)

   Locked ownable synchronizers:
        - None

&quot;main-SharedResourceRunner&quot; daemon prio=10 tid=0x8fcb3400 nid=0x2fc5 in Object.wait() [0x8f53b000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0x9b21ccf0&gt; (a jogamp.opengl.SharedResourceRunner)
        at java.lang.Object.wait(Object.java:502)
        at jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:240)
        - locked &lt;0x9b21ccf0&gt; (a jogamp.opengl.SharedResourceRunner)
        at java.lang.Thread.run(Thread.java:679)

   Locked ownable synchronizers:
        - None

&quot;AWT-XAWT&quot; daemon prio=10 tid=0xb6aa3400 nid=0x2fae waiting on condition [0x8f7ce000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  &lt;0x9b1630c8&gt; (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:838)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:871)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1201)
        at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214)
        at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)
        at sun.awt.SunToolkit.awtLock(SunToolkit.java:264)
        at sun.awt.X11.XToolkit.waitForEvents(Native Method)
        at sun.awt.X11.XToolkit.run(XToolkit.java:568)
        at sun.awt.X11.XToolkit.run(XToolkit.java:543)
        at java.lang.Thread.run(Thread.java:679)

   Locked ownable synchronizers:
        - None

&quot;Java2D Disposer&quot; daemon prio=10 tid=0x8fc46000 nid=0x2faa in Object.wait() [0x8f8d3000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0x9b144890&gt; (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
        - locked &lt;0x9b144890&gt; (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
        at sun.java2d.Disposer.run(Disposer.java:143)
        at java.lang.Thread.run(Thread.java:679)

   Locked ownable synchronizers:
        - None

&quot;Low Memory Detector&quot; daemon prio=10 tid=0xb6a7c000 nid=0x2fa3 runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

&quot;C1 CompilerThread0&quot; daemon prio=10 tid=0xb6a7a000 nid=0x2fa2 waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

&quot;JDWP Command Reader&quot; daemon prio=10 tid=0x089a8400 nid=0x2f9c runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

&quot;JDWP Event Helper Thread&quot; daemon prio=10 tid=0xb6a78400 nid=0x2f9b runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

&quot;JDWP Transport Listener: dt_socket&quot; daemon prio=10 tid=0xb6a75800 nid=0x2f9a runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

&quot;Signal Dispatcher&quot; daemon prio=10 tid=0xb6a6d400 nid=0x2f97 runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

&quot;Finalizer&quot; daemon prio=10 tid=0xb6a5e000 nid=0x2f95 in Object.wait() [0x900ad000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0x9b144998&gt; (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
        - locked &lt;0x9b144998&gt; (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)

   Locked ownable synchronizers:
        - None

&quot;Reference Handler&quot; daemon prio=10 tid=0xb6a5cc00 nid=0x2f94 in Object.wait() [0x900fe000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0x9b1449b8&gt; (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:502)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
        - locked &lt;0x9b1449b8&gt; (a java.lang.ref.Reference$Lock)

   Locked ownable synchronizers:
        - None

&quot;main&quot; prio=10 tid=0xb6a07400 nid=0x2f8e waiting on condition [0xb6bf8000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  &lt;0x9b1630c8&gt; (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:838)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:871)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1201)
        at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214)
        at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)
        at sun.awt.SunToolkit.awtLock(SunToolkit.java:264)
        at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at jogamp.nativewindow.jawt.JAWTUtil.awtLock(JAWTUtil.java:298)
        at jogamp.nativewindow.jawt.JAWTUtil.lockToolkit(JAWTUtil.java:328)
        at jogamp.nativewindow.jawt.JAWTUtil$2.lock(JAWTUtil.java:227)
        at javax.media.nativewindow.DefaultGraphicsDevice.lock(DefaultGraphicsDevice.java:128)
        at com.jogamp.nativewindow.awt.JAWTWindow.lockSurface(JAWTWindow.java:278)
        at jogamp.opengl.GLDrawableImpl.lockSurface(GLDrawableImpl.java:195)
        at jogamp.opengl.GLDrawableImpl.setRealized(GLDrawableImpl.java:156)
        - locked &lt;0x9b2aec78&gt; (a jogamp.opengl.x11.glx.X11OnscreenGLXDrawable)
        at javax.media.opengl.awt.GLCanvas.validateGLDrawable(GLCanvas.java:556)
        at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:398)
        at jogamp.opengl.GLDrawableHelper.invoke(GLDrawableHelper.java:287)
        - locked &lt;0x907532b8&gt; (a java.lang.Object)
        at javax.media.opengl.awt.GLCanvas.invoke(GLCanvas.java:654)
        at com.ardor3d.framework.jogl.JoglAwtCanvas.init(JoglAwtCanvas.java:64)
        at com.ardor3d.framework.jogl.JoglAwtCanvas.draw(JoglAwtCanvas.java:76)
        at com.ardor3d.framework.FrameHandler.updateFrame(FrameHandler.java:90)
        at com.ardor3d.example.canvas.JoglAwtExample.main(JoglAwtExample.java:132)

   Locked ownable synchronizers:
        - &lt;0x9b2aeb98&gt; (a jogamp.common.util.locks.RecursiveLockImpl01Unfairish$SingleThreadSync)

&quot;VM Thread&quot; prio=10 tid=0xb6a58c00 nid=0x2f93 runnable

&quot;VM Periodic Task Thread&quot; prio=10 tid=0xb6a7e400 nid=0x2fa4 waiting on condition

JNI global references: 3871</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1541</commentid>
    <comment_count>8</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-17 19:08:12 +0200</bug_when>
    <thetext>I use a cached GLRunnable, I cannot use our listener model in order to respect Ardor3D framework that uses its own abstraction above all OpenGL bindings. There is no shared context involved yet, each canvas has its own context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542</commentid>
    <comment_count>9</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-17 19:26:02 +0200</bug_when>
    <thetext>+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
Info: XInitThreads() called for concurrent Thread support
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK XR &lt;a826da, 18ed77a&gt;[count 2 [ add. 0, orig 2], qsz 0, owner &lt;main&gt;, add.owner ], cur &lt;main&gt;
NullToolkitLock.lock()
NullToolkitLock.unlock()
X11ToolkitLock.lock() - native: false
+++ LOCK 0 &lt;1e29b99, 5585dc&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK X0 &lt;1e29b99, 5585dc&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 2 [ add. 0, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK XR &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
++ unlock(0): currentThread main-SharedResourceRunner, lock: &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner]
++ unlock(X): currentThread main-SharedResourceRunner, lock: &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner]
--- LOCK XR &lt;a826da, 18ed77a&gt;[count 2 [ add. 0, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 2 [ add. 0, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK XR &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
++ unlock(0): currentThread main-SharedResourceRunner, lock: &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner]
++ unlock(X): currentThread main-SharedResourceRunner, lock: &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner]
--- LOCK XR &lt;a826da, 18ed77a&gt;[count 2 [ add. 0, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 2 [ add. 0, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK XR &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
++ unlock(0): currentThread main-SharedResourceRunner, lock: &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner]
++ unlock(X): currentThread main-SharedResourceRunner, lock: &lt;a826da, 18ed77a&gt;[count 3 [ add. 1, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner]
--- LOCK XR &lt;a826da, 18ed77a&gt;[count 2 [ add. 0, orig 2], qsz 0, owner &lt;main&gt;, add.owner main-SharedResourceRunner], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK 0 &lt;1f8f8c8, 952905&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK X0 &lt;1f8f8c8, 952905&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK 0 &lt;b83be0, 1631573&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK X0 &lt;b83be0, 1631573&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;
X11ToolkitLock.lock() - native: false
+++ LOCK 0 &lt;1e29b99, 5585dc&gt;[count 1, qsz 0, owner &lt;main-SharedResourceRunner&gt;], cur &lt;main-SharedResourceRunner&gt;
+++ LOCK XR &lt;1e29b99, 5585dc&gt;[count 2, qsz 0, owner &lt;main-SharedResourceRunner&gt;], cur &lt;main-SharedResourceRunner&gt;
X11ToolkitLock.unlock() - native: false
--- LOCK XR &lt;1e29b99, 5585dc&gt;[count 1, qsz 0, owner &lt;main-SharedResourceRunner&gt;], cur &lt;main-SharedResourceRunner&gt;
--- LOCK X0 &lt;b83be0, 1631573&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;, signal any
--- LOCK X0 &lt;1f8f8c8, 952905&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;, signal any
X11ToolkitLock.unlock() - native: false
--- LOCK X0 &lt;1e29b99, 5585dc&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main-SharedResourceRunner&gt;, signal any
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 2 [ add. 0, orig 2], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK XR &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
JAWTUtil-ToolkitLock.lock()
NullToolkitLock.lock()
NullToolkitLock.unlock()
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.lock()
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
+++ LOCK 0 &lt;4e50ee, 1a3551c&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
+++ LOCK X0 &lt;4e50ee, 1a3551c&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
--- LOCK X0 &lt;4e50ee, 1a3551c&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;, signal any
JAWTUtil-ToolkitLock.lock()
NullToolkitLock.lock()
NullToolkitLock.unlock()
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.lock()
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
+++ LOCK 0 &lt;1cbcf91, 1a847df&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
+++ LOCK X0 &lt;1cbcf91, 1a847df&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
--- LOCK X0 &lt;1cbcf91, 1a847df&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;, signal any
JAWTUtil-ToolkitLock.lock()
NullToolkitLock.lock()
NullToolkitLock.unlock()
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.lock()
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
+++ LOCK 0 &lt;1734b48, 537d55&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
+++ LOCK X0 &lt;1734b48, 537d55&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
--- LOCK X0 &lt;1734b48, 537d55&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;, signal any
+++ LOCK 0 &lt;4e50ee, 1a3551c&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
+++ LOCK X0 &lt;4e50ee, 1a3551c&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.lock()
JAWTUtil-ToolkitLock.lock()
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
+++ LOCK 0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
+++ LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;
++ unlock(X): currentThread main, lock: &lt;a826da, 18ed77a&gt;[count 1 [ add. 0, orig 1], qsz 0, owner &lt;main&gt;, add.owner ]
--- LOCK X0 &lt;a826da, 18ed77a&gt;[count 0 [ add. 0, orig 0], qsz 0, owner &lt;NULL&gt;, add.owner ], cur &lt;main&gt;, signal any
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
JAWTUtil-ToolkitLock.unlock()
--- LOCK X0 &lt;4e50ee, 1a3551c&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;, signal any
+++ LOCK 0 &lt;1dacb2b, 15092c0&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK X0 &lt;1dacb2b, 15092c0&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK 0 &lt;4e50ee, 1a3551c&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK X0 &lt;4e50ee, 1a3551c&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;AWT-EventQueue-0&gt;
JAWTUtil-ToolkitLock.lock()
+++ LOCK 0 &lt;1dacb2b, 15092c0&gt;[count 1, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK XR &lt;1dacb2b, 15092c0&gt;[count 2, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK 0 &lt;4e50ee, 1a3551c&gt;[count 1, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK XR &lt;4e50ee, 1a3551c&gt;[count 2, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
--- LOCK XR &lt;4e50ee, 1a3551c&gt;[count 1, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
--- LOCK XR &lt;1dacb2b, 15092c0&gt;[count 1, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK 0 &lt;1dacb2b, 15092c0&gt;[count 1, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK XR &lt;1dacb2b, 15092c0&gt;[count 2, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK 0 &lt;4e50ee, 1a3551c&gt;[count 1, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK XR &lt;4e50ee, 1a3551c&gt;[count 2, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK 0 &lt;1dacb2b, 15092c0&gt;[count 2, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK XR &lt;1dacb2b, 15092c0&gt;[count 3, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK 0 &lt;4e50ee, 1a3551c&gt;[count 2, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK XR &lt;4e50ee, 1a3551c&gt;[count 3, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK 0 &lt;4e50ee, 1a3551c&gt;[count 3, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK XR &lt;4e50ee, 1a3551c&gt;[count 4, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
--- LOCK XR &lt;4e50ee, 1a3551c&gt;[count 3, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
--- LOCK XR &lt;4e50ee, 1a3551c&gt;[count 2, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
--- LOCK XR &lt;1dacb2b, 15092c0&gt;[count 2, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
--- LOCK XR &lt;4e50ee, 1a3551c&gt;[count 1, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
--- LOCK XR &lt;1dacb2b, 15092c0&gt;[count 1, qsz 0, owner &lt;AWT-EventQueue-0&gt;], cur &lt;AWT-EventQueue-0&gt;
+++ LOCK 0 &lt;1cbcf91, 1a847df&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
+++ LOCK X0 &lt;1cbcf91, 1a847df&gt;[count 0, qsz 0, owner &lt;NULL&gt;], cur &lt;main&gt;
JAWTUtil-ToolkitLock.lock()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548</commentid>
    <comment_count>10</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-04-21 22:19:10 +0200</bug_when>
    <thetext>&apos;AWT-EventQueue-0&apos; holds 
  - 0x9b1630c8 (AWTTreeLock).
  - 0x9b2ab790 (jogl lock)
  - 0x9b2ac370 (jogl lock)

     &apos;main&apos; waits for it - it tries to lock AWT due to setRealized(true).

&apos;main&apos; holds:
  - 0x9b2aeb98 (jogl lock)

+++

IMHO this is a starvation. AWT-EDT-0 doesn&apos;t release the AWTTreeLock, nor the jogl locks.
Why ? Maybe you didn&apos;t ensure releasing the lock like
       lock();
       try {
          do-some-thing;
       } finally {
          unlock();
       }
Maybe one of your GLRunnables you execute on the AWT-EDT throws an exception
and w/o the unlock in the finally clause, starvation. Just a guess.

+++

Also your &apos;canvas&apos; impl. call setRealized(true) not from the AWT-EDT, as we do it.
This is a possible source of a deadlock .. but I am not so sure here,
since it looks more like a starvation (See above).

But try it - it&apos;s always good to be consistent, i.e. call all AWT resource utilization from the AWT-EDT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551</commentid>
    <comment_count>11</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-22 17:23:16 +0200</bug_when>
    <thetext>I tried to call requestFocus and setVisible(true) directly in the GLRunnable but it did not solve my problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553</commentid>
    <comment_count>12</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-04-24 13:24:32 +0200</bug_when>
    <thetext>Hi

This bug is reproducible only under GNU Linux, not under Microsoft Windows:
http://www.ardor3d.com/forums/viewtopic.php?f=11&amp;t=274&amp;start=130#p15724

If you want to reproduce this bug (until I provide a smaller test case), please install Ardor3D and the renderer based on JOGL 2.0 by following these instructions:
http://gouessej.wordpress.com/2011/09/18/le-moteur-3d-ardor3d-fonctionne-desormais-avec-jogl-2-the-3d-engine-ardor3d-now-works-with-jogl-2/

Finally, run JoglAwtExample.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578</commentid>
    <comment_count>13</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-05-14 14:17:06 +0200</bug_when>
    <thetext>Sorry for the long delay .. reproduced with ardor3d&apos;s trunk and your svn repo.

Triaging now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581</commentid>
    <comment_count>14</comment_count>
      <attachid>348</attachid>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-05-14 16:51:59 +0200</bug_when>
    <thetext>Created attachment 348
Ardor3D JOGL2 Patch Fix GLContext makeCurrent/release imbalance / commented-out workaround for old JOGL bug

Ardor3D JOGL2 Patch Fix:
-  GLContext makeCurrent/release imbalance 

- Commented-out workaround for old JOGL bug
  as fixed in JOGL commit  c066dc997646643a98c35b7c70183930284544d1

- Update to Ardor3D-core SVN r1853

- Eclipse .classpath: Added gluegen &amp; jogl source attachment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582</commentid>
    <comment_count>15</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-05-14 16:58:59 +0200</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created attachment 348 [details]
&gt; Ardor3D JOGL2 Patch Fix GLContext makeCurrent/release imbalance / commented-out
&gt; workaround for old JOGL bug
&gt; 
&gt; Ardor3D JOGL2 Patch Fix:
&gt; -  GLContext makeCurrent/release imbalance

The imbalance throws an exception in JOGL (at exit).
You were doing more makeCurrent() calls then release(),
where destroy() shall be either done w/o holding the context
or while holding it once. Further recursive locking at destroy
will fail-fast to help developer to fix this bug.
 
&gt; 
&gt; - Commented-out workaround for old JOGL bug
&gt;   as fixed in JOGL commit  c066dc997646643a98c35b7c70183930284544d1

Since we don&apos;t produce builds until end of May,
you may want to check JoglAwtCanvas.java line 59-72 in the patched file.
Instead of calling setVisible(true) directly, which will be valid w/ the latest JOGL fix,
you need to uncomment this call and use the commented-out variant
which issues the call on the AWT-EDT including a forced display(). 
 
&gt; 
&gt; - Update to Ardor3D-core SVN r1853
&gt; 
&gt; - Eclipse .classpath: Added gluegen &amp; jogl source attachment

Works fine here now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584</commentid>
    <comment_count>16</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-05-14 18:03:34 +0200</bug_when>
    <thetext>Hi

Thank you so much. I confirm your fixes work fine. I have committed them, I will remove one of them when the nightly builds are available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1865</commentid>
    <comment_count>17</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-10-04 05:48:44 +0200</bug_when>
    <thetext>It seems that commit 4b5a0f6557d7152ec770bc13ad3c494449de0529
caused a regression, where validateGL()&apos;s drawable.setRealize(true) 
might not get called from the AWT-EDT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1866</commentid>
    <comment_count>18</comment_count>
      <attachid>370</attachid>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-10-04 05:49:47 +0200</bug_when>
    <thetext>Created attachment 370
partial revert of commit 4b5a0f6557d7152ec770bc13ad3c494449de0529

partial revert of commit 4b5a0f6557d7152ec770bc13ad3c494449de0529</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1867</commentid>
    <comment_count>19</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-10-04 05:50:29 +0200</bug_when>
    <thetext>Pls test Attachment 370</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868</commentid>
    <comment_count>20</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-10-04 16:01:40 +0200</bug_when>
    <thetext>The GLCanvas is no more realized when calling setVisible(true) even though I do it from the AWT EDT. If I call invoke(true, GLRunnable) just after, it returns false and the drawable is not null but not realized. I have to test your suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869</commentid>
    <comment_count>21</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-10-04 17:21:23 +0200</bug_when>
    <thetext>(In reply to comment #20)
&gt; The GLCanvas is no more realized when calling setVisible(true) even though I do
&gt; it from the AWT EDT. If I call invoke(true, GLRunnable) just after, it returns
&gt; false and the drawable is not null but not realized. I have to test your
&gt; suggestion.

Well, realization of the AWT component @ setVisible(true) is lazy (as we know), 
hence we &apos;poll&apos; it&apos;s validity. This was same w/ pre 4b5a0f6557d7152ec770bc13ad3c494449de0529

The patch partially brings back the flow of validateGLDrawable 
issuuing setRealized(true) on the AWT-EDT. Don&apos;t really know whether this is the cause or not.

Again, if you can create a &apos;reliable&apos; unit test to demonstrate the bug it would be great.
Maybe it is enough to call display() from a non AWT-EDT before and after setVisible(true) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870</commentid>
    <comment_count>22</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-10-04 19:08:51 +0200</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; The GLCanvas is no more realized when calling setVisible(true) even though I do
&gt; &gt; it from the AWT EDT. If I call invoke(true, GLRunnable) just after, it returns
&gt; &gt; false and the drawable is not null but not realized. I have to test your
&gt; &gt; suggestion.
&gt; 
&gt; Well, realization of the AWT component @ setVisible(true) is lazy (as we know), 
&gt; hence we &apos;poll&apos; it&apos;s validity. This was same w/ pre
&gt; 4b5a0f6557d7152ec770bc13ad3c494449de0529
&gt; 
&gt; The patch partially brings back the flow of validateGLDrawable 
&gt; issuuing setRealized(true) on the AWT-EDT. Don&apos;t really know whether this is
&gt; the cause or not.
&gt; 
&gt; Again, if you can create a &apos;reliable&apos; unit test to demonstrate the bug it would
&gt; be great.
&gt; Maybe it is enough to call display() from a non AWT-EDT before and after
&gt; setVisible(true) ?

Your change does not solve the problem, I have just tested. Yes I would like to write a unit test but it is a bit difficult because Ardor3D uses an elaborated framework whereas a unit test should be as rudimentary as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1871</commentid>
    <comment_count>23</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-10-04 19:38:03 +0200</bug_when>
    <thetext>(In reply to comment #21)
&gt; Again, if you can create a &apos;reliable&apos; unit test to demonstrate the bug it would
&gt; be great.

Just use TestBug551AWT and add the following code into the line 102:
System.out.println(glCanvas[0].getDelegatedDrawable().isRealized());

It returned true in RC9, it returns false in RC10.

Calling display() to realize the drawable seems to be needed only with AWT GLCanvas, neither with NewtCanvasAWT nor with GLWindow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1874</commentid>
    <comment_count>24</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-10-05 06:37:03 +0200</bug_when>
    <thetext>See &lt;http://jogamp.org/git/?p=jogl.git;a=commit;h=a3cb6bb14f410f67fccf5ccd4cd7ecc66f448389&gt;

I have added the size validation patch .. in this one as well, as reported here:
  &lt;http://forum.jogamp.org/InternalError-in-GLDrawableHelper-on-OSX-10-8-td4026337.html&gt;

Pls also read the new unit test for clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1875</commentid>
    <comment_count>25</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-10-05 12:45:36 +0200</bug_when>
    <thetext>(In reply to comment #24)
&gt; See
&gt; &lt;http://jogamp.org/git/?p=jogl.git;a=commit;h=a3cb6bb14f410f67fccf5ccd4cd7ecc66f448389&gt;
&gt; 
&gt; I have added the size validation patch .. in this one as well, as reported
&gt; here:
&gt;  
&gt; &lt;http://forum.jogamp.org/InternalError-in-GLDrawableHelper-on-OSX-10-8-td4026337.html&gt;
&gt; 
&gt; Pls also read the new unit test for clarification.

Ok I&apos;m going to test it immediately. You were not forced to remove the null check in setRealizedOnEDTAction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1876</commentid>
    <comment_count>26</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-10-05 12:54:04 +0200</bug_when>
    <thetext>(In reply to comment #25)
&gt; You were not forced to remove the null
&gt; check in setRealizedOnEDTAction.

Well, we claim the lock, hence assuming null and size checks would be redundant.
But earmarking it ..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1878</commentid>
    <comment_count>27</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-10-05 14:47:18 +0200</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; You were not forced to remove the null
&gt; &gt; check in setRealizedOnEDTAction.
&gt; 
&gt; Well, we claim the lock, hence assuming null and size checks would be
&gt; redundant.
&gt; But earmarking it ..

Ok :)

It would be fine to have an autobuild with this fix so that I can remove the kludge from the Ardor3D renderer based on JOGL 2.0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1879</commentid>
    <comment_count>28</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-10-05 14:56:42 +0200</bug_when>
    <thetext>(In reply to comment #27)
&gt; 
&gt; It would be fine to have an autobuild with this fix so that I can remove the
&gt; kludge from the Ardor3D renderer based on JOGL 2.0.

Will happen today, just testing another FBO &apos;hack&apos;, regarding the dummySurface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1880</commentid>
    <comment_count>29</comment_count>
    <who name="Julien Gouesse">gouessej</who>
    <bug_when>2012-10-05 22:02:49 +0200</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; 
&gt; &gt; It would be fine to have an autobuild with this fix so that I can remove the
&gt; &gt; kludge from the Ardor3D renderer based on JOGL 2.0.
&gt; 
&gt; Will happen today, just testing another FBO &apos;hack&apos;, regarding the dummySurface.

It works perfectly :) Thanks for the fix and the unit test.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348</attachid>
            <date>2012-05-14 16:51:59 +0200</date>
            <delta_ts>2012-05-14 16:52:30 +0200</delta_ts>
            <desc>Ardor3D JOGL2 Patch Fix GLContext makeCurrent/release imbalance / commented-out workaround for old JOGL bug</desc>
            <filename>fixBug572_and_GLContextMakeCurrentRelease-Destroy.patch</filename>
            <type>text/plain</type>
            <size>7819</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">SW5kZXg6IHNyYy9tYWluL2phdmEvY29tL2FyZG9yM2QvZnJhbWV3b3JrL2pvZ2wvSm9nbENhbnZh
c1JlbmRlcmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL21haW4vamF2YS9jb20vYXJkb3IzZC9m
cmFtZXdvcmsvam9nbC9Kb2dsQ2FudmFzUmVuZGVyZXIuamF2YQkocmV2aXNpb24gNjMpCisrKyBz
cmMvbWFpbi9qYXZhL2NvbS9hcmRvcjNkL2ZyYW1ld29yay9qb2dsL0pvZ2xDYW52YXNSZW5kZXJl
ci5qYXZhCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw2IEBACiBpbXBvcnQgamF2YXgubWVk
aWEub3BlbmdsLkdMRHJhd2FibGVGYWN0b3J5Ow0KIGltcG9ydCBqYXZheC5tZWRpYS5vcGVuZ2wu
R0xFeGNlcHRpb247DQogaW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5HTFByb2ZpbGU7DQotaW1w
b3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5nbHUuR0xVOw0KIA0KIGltcG9ydCBjb20uYXJkb3IzZC5h
bm5vdGF0aW9uLk1haW5UaHJlYWQ7DQogaW1wb3J0IGNvbS5hcmRvcjNkLmZyYW1ld29yay5DYW52
YXNSZW5kZXJlcjsNCkBAIC0xNDAsNDcgKzEzOSw1MCBAQAogICAgICAgICB9DQogDQogICAgICAg
ICBfY29udGV4dC5tYWtlQ3VycmVudCgpOw0KLQ0KLSAgICAgICAgLy8gTG9vayB1cCBhIHNoYXJl
ZCBjb250ZXh0LCBpZiBhIHNoYXJlZCBKb2dsQ2FudmFzUmVuZGVyZXIgaXMgZ2l2ZW4uDQotICAg
ICAgICBSZW5kZXJDb250ZXh0IHNoYXJlZENvbnRleHQgPSBudWxsOw0KLSAgICAgICAgaWYgKHNl
dHRpbmdzLmdldFNoYXJlQ29udGV4dCgpICE9IG51bGwpIHsNCi0gICAgICAgICAgICBzaGFyZWRD
b250ZXh0ID0gQ29udGV4dE1hbmFnZXIuZ2V0Q29udGV4dEZvcktleShzZXR0aW5ncy5nZXRTaGFy
ZUNvbnRleHQoKS5nZXRSZW5kZXJDb250ZXh0KCkNCi0gICAgICAgICAgICAgICAgICAgIC5nZXRD
b250ZXh0S2V5KCkpOw0KKyAgICAgICAgdHJ5IHsNCisJICAgICAgICAvLyBMb29rIHVwIGEgc2hh
cmVkIGNvbnRleHQsIGlmIGEgc2hhcmVkIEpvZ2xDYW52YXNSZW5kZXJlciBpcyBnaXZlbi4NCisJ
ICAgICAgICBSZW5kZXJDb250ZXh0IHNoYXJlZENvbnRleHQgPSBudWxsOw0KKwkgICAgICAgIGlm
IChzZXR0aW5ncy5nZXRTaGFyZUNvbnRleHQoKSAhPSBudWxsKSB7DQorCSAgICAgICAgICAgIHNo
YXJlZENvbnRleHQgPSBDb250ZXh0TWFuYWdlci5nZXRDb250ZXh0Rm9yS2V5KHNldHRpbmdzLmdl
dFNoYXJlQ29udGV4dCgpLmdldFJlbmRlckNvbnRleHQoKQ0KKwkgICAgICAgICAgICAgICAgICAg
IC5nZXRDb250ZXh0S2V5KCkpOw0KKwkgICAgICAgIH0NCisJDQorCSAgICAgICAgZmluYWwgQ29u
dGV4dENhcGFiaWxpdGllcyBjYXBzID0gY3JlYXRlQ29udGV4dENhcGFiaWxpdGllcygpOw0KKwkg
ICAgICAgIF9jdXJyZW50Q29udGV4dCA9IG5ldyBSZW5kZXJDb250ZXh0KF9jb250ZXh0LCBjYXBz
LCBzaGFyZWRDb250ZXh0KTsNCisJDQorCSAgICAgICAgQ29udGV4dE1hbmFnZXIuYWRkQ29udGV4
dChfY29udGV4dCwgX2N1cnJlbnRDb250ZXh0KTsNCisJICAgICAgICBDb250ZXh0TWFuYWdlci5z
d2l0Y2hDb250ZXh0KF9jb250ZXh0KTsNCisJDQorCSAgICAgICAgX3JlbmRlcmVyID0gbmV3IEpv
Z2xSZW5kZXJlcigpOw0KKwkNCisJICAgICAgICBpZiAoc2V0dGluZ3MuZ2V0U2FtcGxlcygpICE9
IDAgJiYgY2Fwcy5pc011bHRpc2FtcGxlU3VwcG9ydGVkKCkpIHsNCisJICAgICAgICAgICAgZmlu
YWwgR0wgZ2wgPSBfY29udGV4dC5nZXRHTCgpOw0KKwkgICAgICAgICAgICBnbC5nbEVuYWJsZShH
TC5HTF9NVUxUSVNBTVBMRSk7DQorCSAgICAgICAgfQ0KKwkNCisJICAgICAgICBfcmVuZGVyZXIu
c2V0QmFja2dyb3VuZENvbG9yKENvbG9yUkdCQS5CTEFDSyk7DQorCQ0KKwkgICAgICAgIGlmIChf
Y2FtZXJhID09IG51bGwpIHsNCisJICAgICAgICAgICAgLyoqIFNldCB1cCBob3cgb3VyIGNhbWVy
YSBzZWVzLiAqLw0KKwkgICAgICAgICAgICBfY2FtZXJhID0gbmV3IENhbWVyYShzZXR0aW5ncy5n
ZXRXaWR0aCgpLCBzZXR0aW5ncy5nZXRIZWlnaHQoKSk7DQorCSAgICAgICAgICAgIF9jYW1lcmEu
c2V0RnJ1c3R1bVBlcnNwZWN0aXZlKDQ1LjBmLCAoZmxvYXQpIHNldHRpbmdzLmdldFdpZHRoKCkg
LyAoZmxvYXQpIHNldHRpbmdzLmdldEhlaWdodCgpLCAxLCAxMDAwKTsNCisJICAgICAgICAgICAg
X2NhbWVyYS5zZXRQcm9qZWN0aW9uTW9kZShQcm9qZWN0aW9uTW9kZS5QZXJzcGVjdGl2ZSk7DQor
CQ0KKwkgICAgICAgICAgICBmaW5hbCBWZWN0b3IzIGxvYyA9IG5ldyBWZWN0b3IzKDAuMGYsIDAu
MGYsIDEwLjBmKTsNCisJICAgICAgICAgICAgZmluYWwgVmVjdG9yMyBsZWZ0ID0gbmV3IFZlY3Rv
cjMoLTEuMGYsIDAuMGYsIDAuMGYpOw0KKwkgICAgICAgICAgICBmaW5hbCBWZWN0b3IzIHVwID0g
bmV3IFZlY3RvcjMoMC4wZiwgMS4wZiwgMC4wZik7DQorCSAgICAgICAgICAgIGZpbmFsIFZlY3Rv
cjMgZGlyID0gbmV3IFZlY3RvcjMoMC4wZiwgMGYsIC0xLjBmKTsNCisJICAgICAgICAgICAgLyoq
IE1vdmUgb3VyIGNhbWVyYSB0byBhIGNvcnJlY3QgcGxhY2UgYW5kIG9yaWVudGF0aW9uLiAqLw0K
KwkgICAgICAgICAgICBfY2FtZXJhLnNldEZyYW1lKGxvYywgbGVmdCwgdXAsIGRpcik7DQorCSAg
ICAgICAgfSBlbHNlIHsNCisJICAgICAgICAgICAgLy8gdXNlIG5ldyB3aWR0aCBhbmQgaGVpZ2h0
IHRvIHNldCByYXRpby4NCisJICAgICAgICAgICAgX2NhbWVyYS5zZXRGcnVzdHVtUGVyc3BlY3Rp
dmUoX2NhbWVyYS5nZXRGb3ZZKCksDQorCSAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSBzZXR0
aW5ncy5nZXRXaWR0aCgpIC8gKGZsb2F0KSBzZXR0aW5ncy5nZXRIZWlnaHQoKSwgX2NhbWVyYS5n
ZXRGcnVzdHVtTmVhcigpLCBfY2FtZXJhDQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Z2V0RnJ1c3R1bUZhcigpKTsNCisJICAgICAgICB9DQorICAgICAgICB9IGZpbmFsbHkgew0KKyAg
ICAgICAgCV9jb250ZXh0LnJlbGVhc2UoKTsNCiAgICAgICAgIH0NCi0NCi0gICAgICAgIGZpbmFs
IENvbnRleHRDYXBhYmlsaXRpZXMgY2FwcyA9IGNyZWF0ZUNvbnRleHRDYXBhYmlsaXRpZXMoKTsN
Ci0gICAgICAgIF9jdXJyZW50Q29udGV4dCA9IG5ldyBSZW5kZXJDb250ZXh0KF9jb250ZXh0LCBj
YXBzLCBzaGFyZWRDb250ZXh0KTsNCi0NCi0gICAgICAgIENvbnRleHRNYW5hZ2VyLmFkZENvbnRl
eHQoX2NvbnRleHQsIF9jdXJyZW50Q29udGV4dCk7DQotICAgICAgICBDb250ZXh0TWFuYWdlci5z
d2l0Y2hDb250ZXh0KF9jb250ZXh0KTsNCi0NCi0gICAgICAgIF9yZW5kZXJlciA9IG5ldyBKb2ds
UmVuZGVyZXIoKTsNCi0NCi0gICAgICAgIGlmIChzZXR0aW5ncy5nZXRTYW1wbGVzKCkgIT0gMCAm
JiBjYXBzLmlzTXVsdGlzYW1wbGVTdXBwb3J0ZWQoKSkgew0KLSAgICAgICAgICAgIGZpbmFsIEdM
IGdsID0gR0xVLmdldEN1cnJlbnRHTCgpOw0KLSAgICAgICAgICAgIGdsLmdsRW5hYmxlKEdMLkdM
X01VTFRJU0FNUExFKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIF9yZW5kZXJlci5zZXRCYWNr
Z3JvdW5kQ29sb3IoQ29sb3JSR0JBLkJMQUNLKTsNCi0NCi0gICAgICAgIGlmIChfY2FtZXJhID09
IG51bGwpIHsNCi0gICAgICAgICAgICAvKiogU2V0IHVwIGhvdyBvdXIgY2FtZXJhIHNlZXMuICov
DQotICAgICAgICAgICAgX2NhbWVyYSA9IG5ldyBDYW1lcmEoc2V0dGluZ3MuZ2V0V2lkdGgoKSwg
c2V0dGluZ3MuZ2V0SGVpZ2h0KCkpOw0KLSAgICAgICAgICAgIF9jYW1lcmEuc2V0RnJ1c3R1bVBl
cnNwZWN0aXZlKDQ1LjBmLCAoZmxvYXQpIHNldHRpbmdzLmdldFdpZHRoKCkgLyAoZmxvYXQpIHNl
dHRpbmdzLmdldEhlaWdodCgpLCAxLCAxMDAwKTsNCi0gICAgICAgICAgICBfY2FtZXJhLnNldFBy
b2plY3Rpb25Nb2RlKFByb2plY3Rpb25Nb2RlLlBlcnNwZWN0aXZlKTsNCi0NCi0gICAgICAgICAg
ICBmaW5hbCBWZWN0b3IzIGxvYyA9IG5ldyBWZWN0b3IzKDAuMGYsIDAuMGYsIDEwLjBmKTsNCi0g
ICAgICAgICAgICBmaW5hbCBWZWN0b3IzIGxlZnQgPSBuZXcgVmVjdG9yMygtMS4wZiwgMC4wZiwg
MC4wZik7DQotICAgICAgICAgICAgZmluYWwgVmVjdG9yMyB1cCA9IG5ldyBWZWN0b3IzKDAuMGYs
IDEuMGYsIDAuMGYpOw0KLSAgICAgICAgICAgIGZpbmFsIFZlY3RvcjMgZGlyID0gbmV3IFZlY3Rv
cjMoMC4wZiwgMGYsIC0xLjBmKTsNCi0gICAgICAgICAgICAvKiogTW92ZSBvdXIgY2FtZXJhIHRv
IGEgY29ycmVjdCBwbGFjZSBhbmQgb3JpZW50YXRpb24uICovDQotICAgICAgICAgICAgX2NhbWVy
YS5zZXRGcmFtZShsb2MsIGxlZnQsIHVwLCBkaXIpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAg
ICAgICAgICAvLyB1c2UgbmV3IHdpZHRoIGFuZCBoZWlnaHQgdG8gc2V0IHJhdGlvLg0KLSAgICAg
ICAgICAgIF9jYW1lcmEuc2V0RnJ1c3R1bVBlcnNwZWN0aXZlKF9jYW1lcmEuZ2V0Rm92WSgpLA0K
LSAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSBzZXR0aW5ncy5nZXRXaWR0aCgpIC8gKGZsb2F0
KSBzZXR0aW5ncy5nZXRIZWlnaHQoKSwgX2NhbWVyYS5nZXRGcnVzdHVtTmVhcigpLCBfY2FtZXJh
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGcnVzdHVtRmFyKCkpOw0KLSAgICAg
ICAgfQ0KICAgICB9DQogDQogICAgIHB1YmxpYyBHTENvbnRleHQgZ2V0Q29udGV4dCgpIHsNCklu
ZGV4OiBzcmMvbWFpbi9qYXZhL2NvbS9hcmRvcjNkL2ZyYW1ld29yay9qb2dsL0pvZ2xBd3RDYW52
YXMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBzcmMvbWFpbi9qYXZhL2NvbS9hcmRvcjNkL2ZyYW1ld29y
ay9qb2dsL0pvZ2xBd3RDYW52YXMuamF2YQkocmV2aXNpb24gNjMpCisrKyBzcmMvbWFpbi9qYXZh
L2NvbS9hcmRvcjNkL2ZyYW1ld29yay9qb2dsL0pvZ2xBd3RDYW52YXMuamF2YQkod29ya2luZyBj
b3B5KQpAQCAtMTAsNiArMTAsOCBAQAogCiBwYWNrYWdlIGNvbS5hcmRvcjNkLmZyYW1ld29yay5q
b2dsOwogCitpbXBvcnQgamF2YS5hd3QuRXZlbnRRdWV1ZTsKK2ltcG9ydCBqYXZhLmxhbmcucmVm
bGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJy
ZW50LkNvdW50RG93bkxhdGNoOwogaW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5HTEF1dG9EcmF3
YWJsZTsKIGltcG9ydCBqYXZheC5tZWRpYS5vcGVuZ2wuR0xSdW5uYWJsZTsKQEAgLTU0LDcgKzU2
LDIwIEBACiAgICAgICAgIH0KICAgICAJCiAgICAgICAgIC8vIE1ha2UgdGhlIHdpbmRvdyB2aXNp
YmxlIHRvIHJlYWxpemUgdGhlIE9wZW5HTCBzdXJmYWNlLgotICAgICAgICBzZXRWaXNpYmxlKHRy
dWUpOworICAgIAlzZXRWaXNpYmxlKHRydWUpOworICAgIAkvKioKKyAgICAJdHJ5IHsKKwkJCUV2
ZW50UXVldWUuaW52b2tlQW5kV2FpdChuZXcgUnVubmFibGUoKSB7CisJCQkJcHVibGljIHZvaWQg
cnVuKCkgeworCQkJCQlzZXRWaXNpYmxlKHRydWUpOwkJCQkJCisJCQkJCWRpc3BsYXkoKTsgLy8g
Zm9yY2UgY3JlYXRpb24gdmlhIHZhbGlkYXRlR0xEcmF3YWJsZSgpCQkJCQkKKwkJCQl9CisJCQl9
KTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CisgICAg
ICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldFRhcmdldEV4Y2VwdGlvbigp
KTsKKyAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0gKi8KICAgICAgICAg
CiAgICAgICAgIC8vIFJlcXVlc3QgdGhlIGZvY3VzIGhlcmUgYXMgaXQgY2Fubm90IHdvcmsgd2hl
biB0aGUgd2luZG93IGlzIG5vdCB2aXNpYmxlCiAgICAgICAgIHJlcXVlc3RGb2N1cygpOwpJbmRl
eDogc3JjL21haW4vamF2YS9jb20vYXJkb3IzZC9zY2VuZS9zdGF0ZS9qb2dsL3V0aWwvSm9nbFRl
eHR1cmVVdGlsLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3JjL21haW4vamF2YS9jb20vYXJkb3IzZC9z
Y2VuZS9zdGF0ZS9qb2dsL3V0aWwvSm9nbFRleHR1cmVVdGlsLmphdmEJKHJldmlzaW9uIDYzKQor
Kysgc3JjL21haW4vamF2YS9jb20vYXJkb3IzZC9zY2VuZS9zdGF0ZS9qb2dsL3V0aWwvSm9nbFRl
eHR1cmVVdGlsLmphdmEJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1LDcgQEAKIGltcG9ydCBq
YXZheC5tZWRpYS5vcGVuZ2wuR0wyR0wzOwogCiBpbXBvcnQgY29tLmFyZG9yM2QuaW1hZ2UuSW1h
Z2VEYXRhRm9ybWF0OwotaW1wb3J0IGNvbS5hcmRvcjNkLmltYWdlLkltYWdlRGF0YVR5cGU7Citp
bXBvcnQgY29tLmFyZG9yM2QuaW1hZ2UuUGl4ZWxEYXRhVHlwZTsKIGltcG9ydCBjb20uYXJkb3Iz
ZC5pbWFnZS5UZXh0dXJlU3RvcmVGb3JtYXQ7CiBpbXBvcnQgY29tLmFyZG9yM2QuaW1hZ2UuVGV4
dHVyZS5BcHBseU1vZGU7CiBpbXBvcnQgY29tLmFyZG9yM2QuaW1hZ2UuVGV4dHVyZS5Db21iaW5l
ckZ1bmN0aW9uQWxwaGE7CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgdGhyb3cgbmV3IEls
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW5jb3JyZWN0IGZvcm1hdCBzZXQ6ICIgKyBmb3JtYXQp
OwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldEdMUGl4ZWxEYXRhVHlwZShmaW5h
bCBJbWFnZURhdGFUeXBlIHR5cGUpIHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRHTFBpeGVs
RGF0YVR5cGUoZmluYWwgUGl4ZWxEYXRhVHlwZSB0eXBlKSB7CiAgICAgICAgIHN3aXRjaCAodHlw
ZSkgewogICAgICAgICAgICAgY2FzZSBCeXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBHTC5H
TF9CWVRFOwpJbmRleDogLmNsYXNzcGF0aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAuY2xhc3NwYXRoCShyZXZp
c2lvbiA2MykKKysrIC5jbGFzc3BhdGgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAJ
PGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjL21haW4vamF2YSIvPgogCTxjbGFz
c3BhdGhlbnRyeSBjb21iaW5lYWNjZXNzcnVsZXM9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9Ii9h
cmRvcjNkLWNvcmUiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNs
aXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFs
LmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjYiLz4KLQk8Y2xhc3Nw
YXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJsaWIvam9nbC9nbHVlZ2VuLXJ0LmphciIvPgotCTxj
bGFzc3BhdGhlbnRyeSBleHBvcnRlZD0idHJ1ZSIga2luZD0ibGliIiBwYXRoPSJsaWIvam9nbC9q
b2dsLmFsbC5qYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJsaWIvam9n
bC9nbHVlZ2VuLXJ0LmphciIgc291cmNlcGF0aD0ibGliL2pvZ2wvZ2x1ZWdlbi1qYXZhLXNyYy56
aXAiLz4KKwk8Y2xhc3NwYXRoZW50cnkgZXhwb3J0ZWQ9InRydWUiIGtpbmQ9ImxpYiIgcGF0aD0i
bGliL2pvZ2wvam9nbC5hbGwuamFyIiBzb3VyY2VwYXRoPSJsaWIvam9nbC9qb2dsLWphdmEtc3Jj
LnppcCIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgogPC9j
bGFzc3BhdGg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370</attachid>
            <date>2012-10-04 05:49:47 +0200</date>
            <delta_ts>2012-10-04 05:49:47 +0200</delta_ts>
            <desc>partial revert of commit 4b5a0f6557d7152ec770bc13ad3c494449de0529</desc>
            <filename>GLCanvas-prevert-validateGLDrawable-4b5a0f6557d7152ec770bc13ad3c494449de0529.diff</filename>
            <type>text/plain</type>
            <size>3189</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9qb2dsL2NsYXNzZXMvamF2YXgvbWVkaWEvb3BlbmdsL2F3dC9HTENh
bnZhcy5qYXZhIGIvc3JjL2pvZ2wvY2xhc3Nlcy9qYXZheC9tZWRpYS9vcGVuZ2wvYXd0L0dMQ2Fu
dmFzLmphdmEKaW5kZXggMzM1MzIyYi4uMGYwNWE5MSAxMDA2NDQKLS0tIGEvc3JjL2pvZ2wvY2xh
c3Nlcy9qYXZheC9tZWRpYS9vcGVuZ2wvYXd0L0dMQ2FudmFzLmphdmEKKysrIGIvc3JjL2pvZ2wv
Y2xhc3Nlcy9qYXZheC9tZWRpYS9vcGVuZ2wvYXd0L0dMQ2FudmFzLmphdmEKQEAgLTQ0MCw3ICs0
NDAsMTQgQEAgcHVibGljIGNsYXNzIEdMQ2FudmFzIGV4dGVuZHMgQ2FudmFzIGltcGxlbWVudHMg
QVdUR0xBdXRvRHJhd2FibGUsIFdpbmRvd0Nsb3NpbmcKIAogICBAT3ZlcnJpZGUKICAgcHVibGlj
IHZvaWQgZGlzcGxheSgpIHsKKyAgICBpZiggIXZhbGlkYXRlR0xEcmF3YWJsZSgpICkgeworICAg
ICAgICBpZihERUJVRykgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVh
ZE5hbWUoKSsiOiBJbmZvOiBHTENhbnZhcyBkaXNwbGF5IC0gc2tpcHBlZCBHTCByZW5kZXIsIGRy
YXdhYmxlIG5vdCB2YWxpZCB5ZXQiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47IC8vIG5v
dCB5ZXQgYXZhaWxhYmxlIC4uCisgICAgfQogICAgIFRocmVhZGluZy5pbnZva2UodHJ1ZSwgZGlz
cGxheU9uRURUQWN0aW9uLCBnZXRUcmVlTG9jaygpKTsKKyAgICAKICAgICBhd3RXaW5kb3dDbG9z
aW5nUHJvdG9jb2wuYWRkQ2xvc2luZ0xpc3RlbmVyT25lU2hvdCgpOwogICB9CiAKQEAgLTU3MCwy
MiArNTc3LDI5IEBAIHB1YmxpYyBjbGFzcyBHTENhbnZhcyBleHRlbmRzIENhbnZhcyBpbXBsZW1l
bnRzIEFXVEdMQXV0b0RyYXdhYmxlLCBXaW5kb3dDbG9zaW5nCiAgICAgICAgIGlmKCBfZHJhd2Fi
bGUuaXNSZWFsaXplZCgpICkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKCFCZWFucy5pc0Rlc2lnblRpbWUoKSAmJgotICAgICAgICAgICAgIDAgPCBf
ZHJhd2FibGUuZ2V0V2lkdGgoKSAqIF9kcmF3YWJsZS5nZXRIZWlnaHQoKSApIHsKLSAgICAgICAg
ICAgIC8vIG1ha2Ugc3VyZSBkcmF3YWJsZSByZWFsaXphdGlvbiBoYXBwZW5zIG9uIEFXVCBFRFQs
IGR1ZSB0byBBV1RUcmVlIGxvY2sKLSAgICAgICAgICAgIEFXVEVEVEV4ZWN1dG9yLnNpbmdsZXRv
bi5pbnZva2UoZ2V0VHJlZUxvY2soKSwgdHJ1ZSwgc2V0UmVhbGl6ZWRPbkVEVEFjdGlvbik7Ci0g
ICAgICAgICAgICBpZiggX2RyYXdhYmxlLmlzUmVhbGl6ZWQoKSApIHsKLSAgICAgICAgICAgICAg
ICBzZW5kUmVzaGFwZT10cnVlOyAvLyBlbnN1cmUgYSByZXNoYXBlIGlzIGJlaW5nIHNlbmQgLi4K
LSAgICAgICAgICAgICAgICBpZihERUJVRykgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0u
ZXJyLnByaW50bG4oZ2V0VGhyZWFkTmFtZSgpKyI6IFJlYWxpemVkIERyYXdhYmxlOiAiK19kcmF3
YWJsZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgVGhyZWFkLmR1bXBTdGFjaygp
OworICAgICAgICBmaW5hbCBSZWN1cnNpdmVMb2NrIF9sb2NrID0gbG9jazsKKyAgICAgICAgX2xv
Y2subG9jaygpOworICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFC
ZWFucy5pc0Rlc2lnblRpbWUoKSAmJgorICAgICAgICAgICAgICAgICAwIDwgX2RyYXdhYmxlLmdl
dFdpZHRoKCkgKiBfZHJhd2FibGUuZ2V0SGVpZ2h0KCkgKSB7CisgICAgICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIGRyYXdhYmxlIHJlYWxpemF0aW9uIGhhcHBlbnMgb24gQVdUIEVEVCwgZHVlIHRv
IEFXVFRyZWUgbG9jaworICAgICAgICAgICAgICAgIEFXVEVEVEV4ZWN1dG9yLnNpbmdsZXRvbi5p
bnZva2UoZ2V0VHJlZUxvY2soKSwgdHJ1ZSwgc2V0UmVhbGl6ZWRPbkVEVEFjdGlvbik7CisgICAg
ICAgICAgICAgICAgaWYoIF9kcmF3YWJsZS5pc1JlYWxpemVkKCkgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNlbmRSZXNoYXBlPXRydWU7IC8vIGVuc3VyZSBhIHJlc2hhcGUgaXMgYmVpbmcgc2Vu
ZCAuLgorICAgICAgICAgICAgICAgICAgICBpZihERUJVRykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgU3lzdGVtLmVyci5wcmludGxuKGdldFRocmVhZE5hbWUoKSsiOiBSZWFsaXplZCBEcmF3
YWJsZTogIitfZHJhd2FibGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBU
aHJlYWQuZHVtcFN0YWNrKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAg
ICAgX2xvY2sudW5sb2NrKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwog
ICB9CisgIAogICBwcml2YXRlIFJ1bm5hYmxlIHNldFJlYWxpemVkT25FRFRBY3Rpb24gPSBuZXcg
UnVubmFibGUoKSB7CiAgICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CkBA
IC05ODQsMTEgKzk5OCw3IEBAIHB1YmxpYyBjbGFzcyBHTENhbnZhcyBleHRlbmRzIENhbnZhcyBp
bXBsZW1lbnRzIEFXVEdMQXV0b0RyYXdhYmxlLCBXaW5kb3dDbG9zaW5nCiAgICAgICAgIGZpbmFs
IFJlY3Vyc2l2ZUxvY2sgX2xvY2sgPSBsb2NrOwogICAgICAgICBfbG9jay5sb2NrKCk7CiAgICAg
ICAgIHRyeSB7ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiggdmFsaWRhdGVHTERyYXdhYmxl
KCkgKSB7Ci0gICAgICAgICAgICAgICAgaGVscGVyLmludm9rZUdMKGRyYXdhYmxlLCBjb250ZXh0
LCBkaXNwbGF5QWN0aW9uLCBpbml0QWN0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZihERUJV
RykgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihnZXRUaHJlYWROYW1lKCkr
IjogSW5mbzogR0xDYW52YXMgZGlzcGxheSAtIHNraXBwZWQgR0wgcmVuZGVyLCBkcmF3YWJsZSBu
b3QgdmFsaWQgeWV0Iik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBoZWxwZXIuaW52b2tl
R0woZHJhd2FibGUsIGNvbnRleHQsIGRpc3BsYXlBY3Rpb24sIGluaXRBY3Rpb24pOwogICAgICAg
ICB9IGZpbmFsbHkgewogICAgICAgICAgICAgX2xvY2sudW5sb2NrKCk7CiAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>