diff --git a/src/main/java/com/eclipsesource/v8/utils/MemoryManager.java b/src/main/java/com/eclipsesource/v8/utils/MemoryManager.java index 7f236ae56..38c63b08f 100644 --- a/src/main/java/com/eclipsesource/v8/utils/MemoryManager.java +++ b/src/main/java/com/eclipsesource/v8/utils/MemoryManager.java @@ -31,7 +31,7 @@ public class MemoryManager { private MemoryManagerReferenceHandler memoryManagerReferenceHandler; private V8 v8; private ArrayList references = new ArrayList(); - private boolean releasing = false; + private boolean releasing = false; private boolean released = false; /** @@ -73,7 +73,7 @@ public int getObjectReferenceCount() { public void persist(final V8Value object) { v8.getLocker().checkThread(); checkReleased(); - references.remove(object); + memoryManagerReferenceHandler.v8HandleDisposed(object); } /** diff --git a/src/test/java/com/eclipsesource/v8/utils/MemoryManagerTest.java b/src/test/java/com/eclipsesource/v8/utils/MemoryManagerTest.java index 61cc83bfd..59f9213cb 100644 --- a/src/test/java/com/eclipsesource/v8/utils/MemoryManagerTest.java +++ b/src/test/java/com/eclipsesource/v8/utils/MemoryManagerTest.java @@ -315,4 +315,32 @@ public void v8HandleCreated(final V8Value object) { assertTrue(memoryManager.isReleased()); } + @Test + public void testPersistedObjectAffectReferenceCount() { + MemoryManager memoryManager = new MemoryManager(v8); + V8Object object = new V8Object(v8); + + assertEquals(1, memoryManager.getObjectReferenceCount()); + memoryManager.persist(object); + assertEquals(0, memoryManager.getObjectReferenceCount()); + + memoryManager.release(); + object.close(); + } + + @Test + public void testPersistDuplicatedObject() { + MemoryManager memoryManager = new MemoryManager(v8); + V8Object object1 = new V8Object(v8); + V8Object object2 = object1.twin(); + + memoryManager.persist(object2); + memoryManager.release(); + + assertTrue(object1.isReleased()); + assertFalse(object2.isReleased()); + object1.close(); + object2.close(); + } + }