{
  "_class" : "hudson.matrix.MatrixRun",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.model.Cause$UpstreamCause",
          "shortDescription" : "Started by upstream project \"gluegen\" build number 182",
          "upstreamBuild" : 182,
          "upstreamProject" : "gluegen",
          "upstreamUrl" : "job/gluegen/"
        }
      ]
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 182,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "c7c61c8d4032afc74932ebb755a7d8567300f223",
            "branch" : [
              {
                "SHA1" : "c7c61c8d4032afc74932ebb755a7d8567300f223",
                "name" : "origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "c7c61c8d4032afc74932ebb755a7d8567300f223",
            "branch" : [
              {
                "SHA1" : "c7c61c8d4032afc74932ebb755a7d8567300f223",
                "name" : "origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "c7c61c8d4032afc74932ebb755a7d8567300f223",
        "branch" : [
          {
            "SHA1" : "c7c61c8d4032afc74932ebb755a7d8567300f223",
            "name" : "origin/master"
          }
        ]
      },
      "remoteUrls" : [
        
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      "_class" : "hudson.tasks.junit.TestResultAction",
      "failCount" : 3,
      "skipCount" : 0,
      "totalCount" : 13,
      "urlName" : "testReport"
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#182",
  "duration" : 2011517,
  "estimatedDuration" : 364492,
  "executor" : None,
  "fullDisplayName" : "gluegen » macos-x86_64 #182",
  "id" : "2010-10-29_03-22-46",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 182,
  "queueId" : -1,
  "result" : "UNSTABLE",
  "timestamp" : 1288315366000,
  "url" : "https://jogamp.org/chuck/job/gluegen/label=macos-x86_64/182/",
  "builtOn" : "macosx64-NV320M-10_6-jogamp-x64-c3d-006",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "ed254acfa7474877cded7ea14588d0cc8d08ef67",
        "timestamp" : 1286582222000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "- Fix GLProcAddressResolver regression: Use GLProcAddressResolver !\u000a\u000a- X11GLXDrawableFactory:\u000a    - Move shared resource creation/destruction into it's own thread\u000a    - Remove the ATI hack (no XDisplay closing) for every Display,\u000a      this is only necessary for the shared XDisplay and in case of AWT.\u000a\u000a- Newt\u000a    - Display: Only pumpMessages if device is ready.\u000a    - X11Display: Verify handle not null at DispatchMessage.\u000a\u000a- Common recursive ToolkitLock implementation, from\u000a    src/nativewindow/classes/com/jogamp/nativewindow/impl/LockingNativeWindowFactory.java and\u000a    src/newt/classes/com/jogamp/newt/Window.java,\u000a    -> com.jogamp.nativewindow.impl.RecursiveToolkitLock\u000a\u000a- Unique XLockDisplay/XUnlockDisplay call via X11Util to simplify debugging.\u000a  X11Util: Added debug code for XLockDisplay/XUnlockDisplay.\u000a           Added fast LongObjectHashMap\u000a           Added static lib loading and initialization.\u000a           Removed active and passive list, as well as unused methods,\u000a           to easy maintenance. Possible since the only 'uncloseable' Display\u000a           might be the shareable one.\u000a- X11Lib: Added static initialization via X11Util\u000a\u000aTest:\u000a    junit/com/jogamp/test/junit/jogl/demos/gl2/gears/TestGears*\u000a        - Add WindowListener for quit ..\u000a",
        "date" : "2010-10-09T01:57:02+0200",
        "id" : "ed254acfa7474877cded7ea14588d0cc8d08ef67",
        "msg" : "- Fix GLProcAddressResolver regression: Use GLProcAddressResolver !",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "c069735eb68ed0871d4e677ff6a89de0bd32731d",
        "timestamp" : 1286582222000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "NEWT: Fix AWT Parenting ; Multithreading Issues ; Semantics: destroy(), .. ; Misc.\u000a\u000aDue to incapabilities of the previous AWT/NEWT reparenting\u000athe implementation and spec had to be changed to support this feature.\u000aSee the first 2 comments below.\u000a\u000a- Tested on GNU/Linux (OK), Windows (a few bugs left)\u000a-\u000a\u000aTODO:\u000a    - Clarify the size/layout issue, ie who is responsible etc\u000a      In the test, incl AWT/NEWT, we set the size on the GLWindow\u000a      and ie pack the AWT Frame.\u000a\u000a    - Fix remaining [Windows] bugs ..\u000a\u000a    - Fix/Implement MacOSX port ..\u000a\u000aFix AWT/NEWT reparenting:\u000a===========================\u000a\u000a- Now NewtFactory's createWindow() method for parenting handles NativeWindow only\u000a  and is no more responsible for creating a child window upon an AWT Component.\u000a  See class com.jogamp.newt.awt.NewtCanvasAWT for NEWT/AWT parenting.\u000a\u000a- New com.jogamp.newt.awt.NewtCanvasAWT, responsible for handling\u000a  AWT's reparent events via addNotify/removeNotify.\u000a  Reparenting is implemented via the new NEWT Window's reparentWindow() method.\u000a  Also sets the background erase to false, if supported.\u000a\u000a- Fix zero size semantics in Window (setSize/setVisible)\u000a  Since a zero size window is not supported by many compoenent (Windowing system, OpenGL, ..)\u000a  we use the visibility methodology to not show a 0x0 window. See Javadoc.\u000a  AWT components may start with zero size.\u000a\u000a- New NEWT Window: reparentWindow(NativeWindow newParent, Screen newScreen)\u000a  Allowing to change the parent of a window. Similar with the fullscreen toggle,\u000a  but without size/position change.\u000a  Native reparenting allows to keep alive the native\u000a  window while changing the container, hence it is preferred to a destroy/create cycle.\u000a  To benefit from the native reparenting, a NEWT implementation has to implement\u000a    'protected boolean reparentWindowImpl(long newWindowHandle)'\u000a  and return true, otherwise reparenting will be 'emulated' via\u000a  the expensive destroy/create cycle.\u000a\u000a- NEWT's Window references all of it's children, if any\u000a\u000a- NEWT's Window propagates setVisible/destroy actions to it's children.\u000a\u000a- Fix NEWT's destroy() semantics.\u000a  A call of destroy() or destroy(false) shall only result in the destruction of the\u000a  native window (handle) nothing more. A subsequent setVisible(true) shall allow\u000a  the complete recreation of the Window into a usable state.\u000a    A call of destroy(true) destroys all resources the Window holds,\u000a  may include Screen/Display and OpenGL resources in case of GLWindow.\u000a  This is necessary to allow proper reparenting, where a native window may become\u000a  destroyed, but should be recreated via setVisible(true) later on.\u000a\u000a- Fix NEWT set[Size|Position|Fullscreen|Visible] synchronization.\u000a  Use a recursive lock instead of the Window instance, otherwise arbitrary Window access\u000a  via AWT's EDT, NEWT's EDT or other threads can block.\u000a  Also removed a use pattern like:\u000a    key.lock()\u000a    try {\u000a        EDT.invoke(action());\u000a    } finally {\u000a        key.unlock();\u000a    }\u000a  Where action() itself uses the same lock object (here key), the result is a deadlock.\u000a\u000aNativeWindow Changes:\u000a======================\u000a\u000a- We can use XInitThreads() now (concurrent threading support)\u000a  in combination with AWT.\u000a  Might have been some async in our NEWT locking in regards to AWT (sync()),\u000a  and the X11 Display changes made in c787f50d77e2491eb0d8201d534a6fa4885a929e.\u000a\u000a- NativeWindow's window handle is _not_ transient like surface handle,\u000a  fixed documentation.\u000a\u000aJOGL Changes:\u000a=============\u000a\u000a- New 'isRealized()' method in GLDrawable.\u000a\u000a-\u000aMisc Fixes\u000a============\u000a- Fix NEWT set[Size|Position|Fullscreen|Visible] duplicate code\u000a  Due to pure abstract signatures, the set[Size|Position|Fullscreen|Visible]\u000a  implementations of X11, OSX, .. contained duplicate code and state handling (size, pos, ..).\u000a  These are now decoupled, ie generic set[Size|Position|Fullscreen|Visible] implementations\u000a  calling simple set[Size|Position|Fullscreen|Visible]Impl implementations.\u000a\u000a- Fix NEWT: Renamed setAutoDrawableClient(boolean) to setHandleDestroyNotify(boolean)\u000a  The semantic of\u000a    setAutoDrawableClient(boolean) defaults to false\u000a  was too complicated and specific, hence changed to\u000a    setHandleDestroyNotify(boolean) defaults to true\u000a  since its more clear and the name refers the window itself..\u000a\u000a- Fix NEWT: Removed GLWindow's unused global window list\u000a\u000a- Fix NEWT: Remove Window's unused event mask\u000a\u000a- Rename com.jogamp.newt.impl.awt.AWTNewtFactory -> com.jogamp.newt.awt.NewtFactoryAWT\u000a",
        "date" : "2010-10-09T01:57:02+0200",
        "id" : "c069735eb68ed0871d4e677ff6a89de0bd32731d",
        "msg" : "NEWT: Fix AWT Parenting ; Multithreading Issues ; Semantics: destroy(),",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "4c9d40cbb94ddbbc11fec4451e7efe268d96c4be",
        "timestamp" : 1286582222000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "Fix: Locking/Threading; Common IntIntHashMap and Buffers; Fix: glMap*Buffer*; GLX/WGL/CgGL: All runtime dynamic; Misc ..\u000a\u000aTODO: Compile and test on MacOSX ..\u000a\u000aFix:\u000a=====\u000a\u000aMultithreading/Locking:\u000a    See jogl/doc/Implementation/MultiThreading.txt\u000a\u000a    - Locking layer is not platform agnostic, ie GLContextImpl, GLDrawableImpl, ..\u000a      and NEWT: Window/Display\u000a    - No more use of JAWT global lock necessary, removed.\u000a    - No need for X11 Display lock, on the contrary,\u000a      this made the NV driver hang.\u000a    - Use common window/surface lock\u000a    - All NativeWindow surfaceLock's are recursive now\u000a\u000aglMapBuffer: If size is 0, don't do cont with the native call.\u000aglMapBufferRange: Fix capacity.\u000aglNamedBufferDataEXT: Track the size.\u000aglMapNamedBufferEXT: Manual impl. - use the tracked size\u000a\u000aglXGetVisualFromFBConfig, glXChooseFBConfig, glXChooseVisual: Instead of\u000aignoring and implement a renamed version (*Copied), we just use ManualImplementation\u000afor the proper copy-result code.\u000a\u000aDesktopGLDynamicLookupHelper: Initialize _hasGLBinding* attributes\u000ain the determing loadGLJNILibrary() method, which is called by super().\u000aOtherwise static init will overwrite them after the super() call.\u000a\u000aX11GLXDrawableFactory: Don't release anything at shutdown (removed sharedContext.destroy()),\u000asince this caused a freeze/SEGV sometimes.\u000a\u000aFixed NEWT's reparentWindow() functionality incl NewtCanvasAWT usage.\u000a    - Native: if not visible, don't focus, etc\u000a    - NewtCanvasAWT: Use the container size to start with\u000a    - Run the command on the EDT\u000a\u000aUsing GlueGen's new DynamicLibraryBundle utility:\u000a  - X11, Windows and MacOSX OpenGL adapted to DynamicLibraryBundleInfo.\u000a  - X11GLXDynamicLookupHelper -> X11GLXDynamicLibraryBundleInfo\u000a    - Remove all path from lib names.\u000a    - GL order:  libGL.so.1, libGL.so, GL\u000a    - shallLinkGlobal: true -> to server some 'old' DRI systems\u000a        -> http://dri.sourceforge.net/doc/DRIuserguide.html\u000a    - shallLookupGlobal: false\u000a    - Try both : glXGetProcAddressARB and glXGetProcAddress\u000a    - Using bootstrap: GLX.glXGetProcAddress(long glxGetProcAddressHandle, String glFuncName)\u000a\u000aFound the issue with LIBGL_DRIVERS_PATH, ie if not set\u000ano valid GL instance can be found (ie ATI fglrx/DRI).\u000aThis may happen if using a differen user than the desktop user\u000afor whom the env var is set within some /etc/X11/Xsession.d/ script.\u000a\u000aEnhancements:\u000a=============\u000a\u000aGLBufferSizeTracker: Use IntIntHashMap and add DirectState size tracking.\u000aGLBufferStateTracker: Use IntIntHashMap.\u000aGLStateTracker: Use IntIntHashMap.\u000a\u000aGLDynamicLookupHelper: More generic (global loading/lookup and GetProcAddress function name list),\u000a                       remove redundant code.\u000a   FIXME:\u000a    MacOSXCGLDynamicLookupHelper:\u000a        - Not tested\u000a        - Not using NSImage lookup anymore as recommended by OSX API Doc,\u000a          so dlsym is used always (to be tested)\u000a\u000a    WindowsWGLDynamicLookupHelper:\u000a        - Not tested\u000a\u000aGLX/WGL/CgGL is all runtime-dynamic as now, ie loaded and looked-up at runtime,\u000ano compile time dependencies to GL anymore, nor a need to specify CgGL.\u000a\u000aSplit up WGL in GDI and WGL, to allow proper dynamic runtime linkage of OpenGL32\u000awhile using static binding to GDI32\u000a\u000aNEWT events generated by native code are enqueued and not send directly.\u000aThis should ease locking mechanisms .. if any are necessary.\u000a\u000aNEWT: More platform specific code moved to *Impl method,\u000asimplifying the generic code of the superclass and impl protocol.\u000a\u000aCleanup:\u000a=========\u000a\u000aReplace all InternalBufferUtil's with com.jogamp.common.nio.Buffers\u000a\u000aRemoved all InternalBufferUtil's from repository\u000a\u000aRemoved GLContextImpl notion of 'optimized' surface locking,\u000awhere the surface gets unlocked during makeCurrent/release.\u000aThis just makes no sense and would impact multithreading in a horrible way.\u000a",
        "date" : "2010-10-09T01:57:02+0200",
        "id" : "4c9d40cbb94ddbbc11fec4451e7efe268d96c4be",
        "msg" : "Fix: Locking/Threading; Common IntIntHashMap and Buffers; Fix:",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "e82d55e7ad9ec8ded84d8154d9e999655ce536c5",
        "timestamp" : 1286582223000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "GLAutoDrawable: setAnimator/getAnimator/invoke/display changes; NEWT: Adding native repaint; NewtCanvasAWT focus fix\u000a\u000aSupport for native repaint, which shall call display() in case no animator is running.\u000aGLAutoDrawable invoke(GLRunnable) impl. handles case if invoked on animator thread,\u000aor no animator thread is running (issueing a display() call).\u000aThe impl resides in GLDrawableHelper.\u000a\u000aGLEventListener's init() and glViewport()/reshape() method must be called before the 1st display()\u000aand after a dispose() call. It could miss the 1st display() call if added\u000aafter the setVisible(true) call - due to the native repainting.\u000aThe impl resides in GLDrawableHelper.\u000a\u000aThe Animator un-/registers itself at the GLAutoDrawable via setAnimator.\u000a\u000aNEWT Window reparent always issues a resize() and display() call.\u000a\u000aNEWT native Window uses direct send.*Event for input events (again),\u000ainstead of enqueueing it for performance.\u000a\u000aNEWT Window implements all status change and Java native event callbacks,\u000ainstead of having duplicated code in all implementations.\u000a\u000aNewtCanvasAWT if the Newt window is focused, the AWT/Swing component[s] will loose the focus.\u000a",
        "date" : "2010-10-09T01:57:03+0200",
        "id" : "e82d55e7ad9ec8ded84d8154d9e999655ce536c5",
        "msg" : "GLAutoDrawable: setAnimator/getAnimator/invoke/display changes; NEWT:",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "548f41754a66b556376e56a5abd568a41aeba828",
        "timestamp" : 1286582223000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "GLAutoDrawable: setAnimator/getAnimator/invoke/display changes; NEWT: Adding native repaint; Fix reparent/fullscreen\u000a\u000aNew: NEWT Native Repaint\u000a=========================\u000aSupport for native repaint, which shall call display() in case no animator is running.\u000aGLAutoDrawable invoke(GLRunnable) impl. handles case if invoked on animator thread,\u000aor no animator thread is running (issueing a display() call).\u000aThe impl resides in GLDrawableHelper.\u000a\u000aThe Animator un-/registers itself at the GLAutoDrawable via setAnimator.\u000a\u000aNew: NEWT AWT/NEWT Parenting Focus Handling\u000a============================================\u000aIntroducing Window.FocusRunnable, to be registered at the NEWT Window,\u000awhich will be executed before the native focus claim.\u000aWindow.FocusRunnable's run method returns a boolean,\u000awhich determines whether the native implementation shall proceed claiming the native focus.\u000aThis API focus hook is necessary to allow an optional underlying windowing toolkit,\u000aie AWT (see usage NewtCanvasAWT), to make the focus traversal transparent.\u000a\u000aFix: GLEventListener / GLDrawableHelper\u000a========================================\u000aGLEventListener's init() and glViewport()/reshape() method must be called before the 1st display()\u000aand after a dispose() call. It could miss the 1st display() call if added\u000aafter the setVisible(true) call - due to the native repainting.\u000aThe impl resides in GLDrawableHelper.\u000a\u000aFix: Misc NEWT\u000a==============\u000aWindow reparent issues a resize() and display() call, if it is visible.\u000a\u000anative Window uses direct send.*Event for input events (again),\u000ainstead of enqueueing it for performance.\u000a\u000aWindow impl all status change native event Java callbacks, instead of having\u000aduplicated code in all implementations.\u000a\u000aFullscreen, reposition at zero.\u000a\u000aReparent/Fullscreen repaint if visible.\u000a\u000aNative reparent/fullscreen, fix glitches on Windows (visibility while reparenting)\u000a",
        "date" : "2010-10-09T01:57:03+0200",
        "id" : "548f41754a66b556376e56a5abd568a41aeba828",
        "msg" : "GLAutoDrawable: setAnimator/getAnimator/invoke/display changes; NEWT:",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "57c0095eb778dac3a7f413bede00e59b35b4069a",
        "timestamp" : 1286582223000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "NEWT: Changed Lifecycle of Display/Screen (part 2)\u000a\u000aWindow Reparenting (unification):\u000a    On the fly Display/Screen creation resides in NewtFactory.\u000a    Reparenting logic within Window.\u000a    Handles all reparenting cases now:\u000a        ACTION_NONE, ACTION_SOFT_REPARENTING,\u000a        ACTION_NATIVE_REPARENTING, ACTION_NATIVE_CREATION\u000a\u000a- out.println -> err.println\u000a\u000a++++\u000a\u000a- Bumbed windows bat scripts to 1.6.0_21 and ant 1.8.1\u000a- Debug: /RecursiveToolkitLock.java TO is 300s for now, while not finished.\u000a-\u000a\u000a+++\u000a\u000aNeeds more testing. Deadlocks: AWT/NEWT parenting.\u000a",
        "date" : "2010-10-09T01:57:03+0200",
        "id" : "57c0095eb778dac3a7f413bede00e59b35b4069a",
        "msg" : "NEWT: Changed Lifecycle of Display/Screen (part 2)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "342e2031852f98b98f09441d1ef408a6180c5680",
        "timestamp" : 1286582223000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "NEWT: Fix Display/Window/Screen OO Identity, Reparenting and requestFocus\u000a\u000aNativeWindow: Interface NativeWindow changes:\u000a    - Remove 'throws' qualifier in lockSurface(), since it is not\u000a    - Adding convenient 'one call' isSurfaceLockedByOtherThread()\u000a    - Adding getSurfaceLockOwner()\u000a\u000aNEWT Window/GLWindow:\u000a\u000a- Unclutter Window/GLWindow relationship - save Window's indentity\u000a    GLWindow's role is a GLAutoDrawable implementation aggregating\u000a    (maybe even compositioning) a Window.\u000a\u000a    The previous implementation just derived from the Window implementation,\u000a    overwriting methods and fields - impossible to ensure sanity / completness.\u000a    It was also not ensured that the added functionality of GLWindow\u000a    (setVisible, destroy, ..) has been issued in case of handling the\u000a    aggregated Window alone (window callbacks, ..).\u000a\u000a    To solve this issue in a 1st attempt without changing the GLWindow API,\u000a    Window is just an interface, being implemented by their specializations,\u000a    hence sanity is intrinsic.\u000a\u000a    GLWindow's added functionality is ensured by a Window.LifecycleHook\u000a    interfaced implementation, registered at the aggregated Window.\u000a\u000a    - Screen and Window are interfaces now (new files)\u000a\u000a    - Display is an abstract class.\u000a\u000a    - Their (abstract) implementations resides in impl/<BaseName>Impl\u000a\u000a    - GLWindow implements Window as well\u000a\u000a- Remove Screen reference handled by setScreen(Screen) method.\u000a\u000a- Lock native parentWindow if used (createNative/reparenting)\u000a\u000a- Move lockSurface/unlockSurface from unchecked override pattern\u000a  to an callback style using abstract methods lockSurfaceImpl/...\u000a\u000a- Sorting all methods to semantic sections, abstract, superinterface, ..\u000a\u000a- Reparenting: Handling different reparenting situations:\u000a    - Unchanged - No change\u000a    - Native Reparenting - Compatible Display/Screen, try native reparenting\u000a    - Native (Re)Creation - Use destroy/create pattern\u000a    - Native Creation Pending - Create later\u000a\u000a- setUndecorated() calls reconfigure Window now, ie tries to change the window actually\u000a\u000a- Don't issue 'requestFocus()' directly from the native implementation anymore,\u000a  call it from the Java code.\u000a\u000a- Window/GLWindow/NewtFactory: Constructor simplification\u000a    Avoid explosion of constructor overloading, ie removing the 'undecorated' variant,\u000a    since this is redundant due to the 'setUndecorated(boolean)' method.\u000a\u000a- Fixed/added API documentation\u000a",
        "date" : "2010-10-09T01:57:03+0200",
        "id" : "342e2031852f98b98f09441d1ef408a6180c5680",
        "msg" : "NEWT: Fix Display/Window/Screen OO Identity, Reparenting and",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "8c85cdd4705cf3fad65e93093a7299d531e2f07e",
        "timestamp" : 1286582223000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "RecursiveToolkitLock default TO 5s\u000a",
        "date" : "2010-10-09T01:57:03+0200",
        "id" : "8c85cdd4705cf3fad65e93093a7299d531e2f07e",
        "msg" : "RecursiveToolkitLock default TO 5s",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "671695574b65b2a03c293dce2979b6e9972f35f2",
        "timestamp" : 1286582223000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "Fix: NativeWindow RecursiveToolkitLock, GLWindow lockSurface/unlockSurface\u000a\u000aFix: NativeWindow RecursiveToolkitLock\u000a    - Use notify(), instead of notifyAll(), so only one thread is being awakened\u000a      for the single resource. Otherwise starvation and timeout happen, since\u000a      the oldest thread might not get waken up (earlier than other threads) within timeout.\u000a\u000a    - Inner class for all synchronized (flow/mem) fields for easier fine grained sync/lock.\u000a\u000aFix: GLWindow lockSurface/unlockSurface\u000a    - Enter locked surface block only if surface lock could be acquired\u000a",
        "date" : "2010-10-09T01:57:03+0200",
        "id" : "671695574b65b2a03c293dce2979b6e9972f35f2",
        "msg" : "Fix: NativeWindow RecursiveToolkitLock, GLWindow",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "0d19ad1b059339cec59aa794b95d38047be7ab3e",
        "timestamp" : 1286582223000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "Fix RecursiveToolkitLock: Implement complete fair FIFO scheduler (wait-interrupt) using a LinkedList\u000a",
        "date" : "2010-10-09T01:57:03+0200",
        "id" : "0d19ad1b059339cec59aa794b95d38047be7ab3e",
        "msg" : "Fix RecursiveToolkitLock: Implement complete fair FIFO scheduler",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/java/com/jogamp/common/util/RecursiveToolkitLock.java",
          "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
        ],
        "commitId" : "6527fa303dcf290f67ec624ca8326b995264514f",
        "timestamp" : 1286582381000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "RecursiveToolkitLock relocation to gluegen finished\u000a",
        "date" : "2010-10-09T01:59:41+0200",
        "id" : "6527fa303dcf290f67ec624ca8326b995264514f",
        "msg" : "RecursiveToolkitLock relocation to gluegen finished",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/java/com/jogamp/common/util/RecursiveToolkitLock.java"
          },
          {
            "editType" : "delete",
            "file" : "src/nativewindow/classes/com/jogamp/nativewindow/impl/RecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "make/build-junit.xml",
          "src/junit/com/jogamp/common/util/TestRecursiveToolkitLock.java"
        ],
        "commitId" : "23b02e8cce05ed6020ed3eb1c8e23d0d83932379",
        "timestamp" : 1286583424000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "Added TestRecursiveToolkitLock; junit.run: disable inner classes in batch run\u000a",
        "date" : "2010-10-09T02:17:04+0200",
        "id" : "23b02e8cce05ed6020ed3eb1c8e23d0d83932379",
        "msg" : "Added TestRecursiveToolkitLock; junit.run: disable inner classes in",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/junit/com/jogamp/common/util/TestRecursiveToolkitLock.java"
          },
          {
            "editType" : "edit",
            "file" : "make/build-junit.xml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "make/scripts/runtest.sh"
        ],
        "commitId" : "52dcea28906b3e61ef44595399e525dd5169c014",
        "timestamp" : 1286584553000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "fix runtest.sh scripts\u000a",
        "date" : "2010-10-09T02:35:53+0200",
        "id" : "52dcea28906b3e61ef44595399e525dd5169c014",
        "msg" : "fix runtest.sh scripts",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "make/scripts/runtest.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/java/com/jogamp/common/util/locks/RecursiveLock.java",
          "src/java/com/jogamp/common/util/locks/Lock.java",
          "src/java/com/jogamp/common/util/locks/LockExt.java",
          "src/junit/com/jogamp/common/util/TestRecursiveToolkitLock.java",
          "make/scripts/runtest.sh",
          "src/java/com/jogamp/common/impl/Debug.java",
          "src/java/com/jogamp/common/os/Platform.java",
          "src/java/com/jogamp/common/util/RecursiveToolkitLock.java",
          "src/java/com/jogamp/common/util/ReflectionUtil.java",
          "src/junit/com/jogamp/common/util/locks/TestRecursiveLock01.java",
          "make/build.xml"
        ],
        "commitId" : "1c7f8f8dafe0252afbb0e2701687210814b56793",
        "timestamp" : 1287077414000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "Moved locking to: com.jogamp.common.util.locks ; Better abstraction ; Misc changes\u000a",
        "date" : "2010-10-14T19:30:14+0200",
        "id" : "1c7f8f8dafe0252afbb0e2701687210814b56793",
        "msg" : "Moved locking to: com.jogamp.common.util.locks ; Better abstraction ;",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/java/com/jogamp/common/impl/Debug.java"
          },
          {
            "editType" : "add",
            "file" : "src/junit/com/jogamp/common/util/locks/TestRecursiveLock01.java"
          },
          {
            "editType" : "edit",
            "file" : "src/java/com/jogamp/common/os/Platform.java"
          },
          {
            "editType" : "delete",
            "file" : "src/java/com/jogamp/common/util/RecursiveToolkitLock.java"
          },
          {
            "editType" : "edit",
            "file" : "src/java/com/jogamp/common/util/ReflectionUtil.java"
          },
          {
            "editType" : "add",
            "file" : "src/java/com/jogamp/common/util/locks/LockExt.java"
          },
          {
            "editType" : "add",
            "file" : "src/java/com/jogamp/common/util/locks/Lock.java"
          },
          {
            "editType" : "add",
            "file" : "src/java/com/jogamp/common/util/locks/RecursiveLock.java"
          },
          {
            "editType" : "edit",
            "file" : "make/scripts/runtest.sh"
          },
          {
            "editType" : "edit",
            "file" : "make/build.xml"
          },
          {
            "editType" : "delete",
            "file" : "src/junit/com/jogamp/common/util/TestRecursiveToolkitLock.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/java/com/jogamp/common/util/ArrayHashSet.java",
          "src/junit/com/jogamp/common/util/locks/TestRecursiveLock01.java",
          "src/junit/com/jogamp/common/util/TestIteratorIndexCORE.java",
          "make/scripts/runtest.sh",
          "src/junit/com/jogamp/common/util/TestArrayHashSet01.java"
        ],
        "commitId" : "68d1b38046e1c40bc937ba17ed9aac6e99f608b8",
        "timestamp" : 1287797562000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "New jogamp.common.util.ArrayHashSet, providing O(1) queries/add and identity operations\u000a",
        "date" : "2010-10-23T03:32:42+0200",
        "id" : "68d1b38046e1c40bc937ba17ed9aac6e99f608b8",
        "msg" : "New jogamp.common.util.ArrayHashSet, providing O(1) queries/add and",
        "paths" : [
          {
            "editType" : "add",
            "file" : "src/junit/com/jogamp/common/util/TestIteratorIndexCORE.java"
          },
          {
            "editType" : "edit",
            "file" : "src/junit/com/jogamp/common/util/locks/TestRecursiveLock01.java"
          },
          {
            "editType" : "add",
            "file" : "src/junit/com/jogamp/common/util/TestArrayHashSet01.java"
          },
          {
            "editType" : "edit",
            "file" : "make/scripts/runtest.sh"
          },
          {
            "editType" : "add",
            "file" : "src/java/com/jogamp/common/util/ArrayHashSet.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/java/com/jogamp/common/util/ArrayHashSet.java",
          "src/junit/com/jogamp/common/util/TestArrayHashSet01.java"
        ],
        "commitId" : "03b9741af9d3088afe6833553be54b14469922fc",
        "timestamp" : 1287800794000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "ArrayHashSet: Add 'getOrAdd(key)' identity method to conveniently get the identity or add it, if not exist yet\u000a",
        "date" : "2010-10-23T04:26:34+0200",
        "id" : "03b9741af9d3088afe6833553be54b14469922fc",
        "msg" : "ArrayHashSet: Add 'getOrAdd(key)' identity method to conveniently get",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/java/com/jogamp/common/util/ArrayHashSet.java"
          },
          {
            "editType" : "edit",
            "file" : "src/junit/com/jogamp/common/util/TestArrayHashSet01.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/java/com/jogamp/common/util/ArrayHashSet.java"
        ],
        "commitId" : "1618adf71b6510dd35c1aef3b1b280831d4b4c97",
        "timestamp" : 1288046710000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "ArrayHashSet: List toList() -> ArrayList toArrayList()\u000a",
        "date" : "2010-10-26T00:45:10+0200",
        "id" : "1618adf71b6510dd35c1aef3b1b280831d4b4c97",
        "msg" : "ArrayHashSet: List toList() -> ArrayList toArrayList()",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/java/com/jogamp/common/util/ArrayHashSet.java"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/java/com/jogamp/common/util/locks/RecursiveLock.java"
        ],
        "commitId" : "c7c61c8d4032afc74932ebb755a7d8567300f223",
        "timestamp" : 1288311073000,
        "author" : {
          "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
          "fullName" : "Sven Gothel"
        },
        "authorEmail" : "sgothel@jausoft.com",
        "comment" : "RecursiveLock: TRACE_LOCK: StackTrace -> err.println\u000a",
        "date" : "2010-10-29T02:11:13+0200",
        "id" : "c7c61c8d4032afc74932ebb755a7d8567300f223",
        "msg" : "RecursiveLock: TRACE_LOCK: StackTrace -> err.println",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/java/com/jogamp/common/util/locks/RecursiveLock.java"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jogamp.org/chuck/user/sven%20gothel",
      "fullName" : "Sven Gothel"
    }
  ]
}