summaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp/opengl
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2019-12-31 05:45:00 +0100
committerSven Gothel <[email protected]>2019-12-31 05:45:00 +0100
commit79833c9e4741bec9d1f56ea8b322679756b16f70 (patch)
tree5c6ae3c97c41e293aca513297216c06a848503d9 /src/jogl/classes/jogamp/opengl
parent658e25429aa150fad45a7c81a5a08f9ca35c4479 (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/classes/jogamp/opengl')
-rw-r--r--src/jogl/classes/jogamp/opengl/GLContextShareSet.java5
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;