diff options
author | Sven Gothel <[email protected]> | 2020-03-05 19:20:19 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2020-03-05 19:20:19 +0100 |
commit | 3e141416ea6c85c14dc622dae57f071d5fd0ff4f (patch) | |
tree | b59b7b782cdf768ba28939c88159e02eafb98f5a /src/nativewindow/classes | |
parent | 36ca7245653b1a0897f2070b9acbe0f0898f5949 (diff) |
Bug 1398: Expose NativeSurface implementation's RecursiveLock if utilized
This prepares proper release of the acquired NativeSurface lock to cure the missing CGLContext lock, see followup commit.
Diffstat (limited to 'src/nativewindow/classes')
-rw-r--r-- | src/nativewindow/classes/com/jogamp/nativewindow/NativeSurface.java | 19 | ||||
-rw-r--r-- | src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java | 5 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/nativewindow/classes/com/jogamp/nativewindow/NativeSurface.java b/src/nativewindow/classes/com/jogamp/nativewindow/NativeSurface.java index ce0699c56..5433ea6c0 100644 --- a/src/nativewindow/classes/com/jogamp/nativewindow/NativeSurface.java +++ b/src/nativewindow/classes/com/jogamp/nativewindow/NativeSurface.java @@ -28,6 +28,8 @@ package com.jogamp.nativewindow; +import com.jogamp.common.util.locks.RecursiveLock; + /** * Provides low-level information required for * hardware-accelerated rendering using a surface in a platform-independent manner. @@ -55,6 +57,23 @@ public interface NativeSurface extends SurfaceUpdatedListener { /** Returned by {@link #lockSurface()} if the surface is locked, and is unchanged, {@value}. */ public static final int LOCK_SUCCESS = 3; + + /** + * Returns the implementation's {@link RecursiveLock} synchronizing multithreaded access + * if used. Otherwise {@code null} is being returned. + * <p> + * {@link NativeSurface}'s {@link RecursiveLock} is only exposed to resolve special + * situations within the implementation and its usage is not advised if not absolutely necessary. + * </p> + * <p> + * Note that certain {@link NativeSurface} implementations only use the {@link RecursiveLock} + * as an upfront re-entrance lock vehicle, but actually acquire and release + * the underlying windowing toolkit's lock facility on the first or last re-entrance lock, + * respectively. + * </p> + */ + public RecursiveLock getLock(); + /** * Lock the surface of this native window. * <p> diff --git a/src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java b/src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java index 9f650f760..98fb6aa3b 100644 --- a/src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java +++ b/src/nativewindow/classes/jogamp/nativewindow/ProxySurfaceImpl.java @@ -191,6 +191,11 @@ public abstract class ProxySurfaceImpl implements ProxySurface { } @Override + public RecursiveLock getLock() { + return surfaceLock; + } + + @Override public int lockSurface() throws NativeWindowException, RuntimeException { surfaceLock.lock(); int res = surfaceLock.getHoldCount() == 1 ? LOCK_SURFACE_NOT_READY : LOCK_SUCCESS; // new lock ? |