diff options
author | Sven Gothel <[email protected]> | 2019-12-31 05:45:00 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2019-12-31 05:45:00 +0100 |
commit | 79833c9e4741bec9d1f56ea8b322679756b16f70 (patch) | |
tree | 5c6ae3c97c41e293aca513297216c06a848503d9 /src/jogl | |
parent | 658e25429aa150fad45a7c81a5a08f9ca35c4479 (diff) |
Bug 1312: GLContextShareSet: Utilize WeakIdentityHashMap for shareMap and its destroyedShares
Picking up Tom Nuydens suggestion to utilize a WeakIdentityHashMap instead of a IdentityHashMap,
allowing destroyed GLContext to be removed from the GLContextShareSet through the GC.
TestSharedContextVBOES2NEWT5 demonstrates the use-case, having one master context
and several slaves being spawn off, killed and new sets to be spawn off.
Here the GLContextShareSet shall not hard-reference the destroyed and user-unreferenced context,
but allowing the system to GC 'em.
Diffstat (limited to 'src/jogl')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLContextShareSet.java | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLContextShareSet.java b/src/jogl/classes/jogamp/opengl/GLContextShareSet.java index 3a6502e1a..e366334b1 100644 --- a/src/jogl/classes/jogamp/opengl/GLContextShareSet.java +++ b/src/jogl/classes/jogamp/opengl/GLContextShareSet.java @@ -47,6 +47,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; +import com.jogamp.common.util.WeakIdentityHashMap; import com.jogamp.opengl.GLContext; import com.jogamp.opengl.GLException; @@ -61,11 +62,11 @@ public class GLContextShareSet { // This class is implemented using a HashMap which maps from all shared contexts // to a share set, containing all shared contexts itself. - private static final Map<GLContext, ShareSet> shareMap = new IdentityHashMap<GLContext, ShareSet>(); + private static final Map<GLContext, ShareSet> shareMap = new WeakIdentityHashMap<GLContext, ShareSet>(); private static class ShareSet { private final Map<GLContext, GLContext> createdShares = new IdentityHashMap<GLContext, GLContext>(); - private final Map<GLContext, GLContext> destroyedShares = new IdentityHashMap<GLContext, GLContext>(); + private final Map<GLContext, GLContext> destroyedShares = new WeakIdentityHashMap<GLContext, GLContext>(); public final void mapNewEntry(final GLContext slave, final GLContext master) { final GLContext preMaster; |