# HG changeset patch # User kcr # Date 1490140282 25200 # Node ID cfb5d27e298f3a8d6c9ea070902b608cc383d4b9 # Parent 2c68a01994fa5345b3419dfb141986a86582d9ab imported patch TMP-fix-dom-leak diff --git a/modules/javafx.web/src/main/java-wrappers/com/sun/webkit/dom/DOMWindowImpl.java b/modules/javafx.web/src/main/java-wrappers/com/sun/webkit/dom/DOMWindowImpl.java --- a/modules/javafx.web/src/main/java-wrappers/com/sun/webkit/dom/DOMWindowImpl.java +++ b/modules/javafx.web/src/main/java-wrappers/com/sun/webkit/dom/DOMWindowImpl.java @@ -53,6 +53,7 @@ } DOMWindowImpl node = (DOMWindowImpl)createInterface(peer); SelfDisposer disposer = new SelfDisposer(node, peer); + Disposer.addRecord(disposer); disposer.next = head; hashTable[hash] = disposer; if (3 * hashCount >= 2 * hashTable.length) diff --git a/modules/javafx.web/src/main/java-wrappers/com/sun/webkit/dom/NodeImpl.java b/modules/javafx.web/src/main/java-wrappers/com/sun/webkit/dom/NodeImpl.java --- a/modules/javafx.web/src/main/java-wrappers/com/sun/webkit/dom/NodeImpl.java +++ b/modules/javafx.web/src/main/java-wrappers/com/sun/webkit/dom/NodeImpl.java @@ -54,6 +54,7 @@ } NodeImpl node = (NodeImpl)createInterface(peer); SelfDisposer disposer = new SelfDisposer(node, peer); + Disposer.addRecord(disposer); disposer.next = head; hashTable[hash] = disposer; if (3 * hashCount >= 2 * hashTable.length) diff --git a/modules/javafx.web/src/main/java/com/sun/webkit/Disposer.java b/modules/javafx.web/src/main/java/com/sun/webkit/Disposer.java --- a/modules/javafx.web/src/main/java/com/sun/webkit/Disposer.java +++ b/modules/javafx.web/src/main/java/com/sun/webkit/Disposer.java @@ -98,6 +98,25 @@ records.add(new WeakDisposerRecord(target, rec)); } + + /** + * Registers the WeakDisposerRecord for later disposal. + * @param rec the associated DisposerRecord object + * @see DisposerRecord + */ + public static void addRecord(WeakDisposerRecord rec) { + disposerInstance.add(rec); + } + + /** + * Performs the actual registration of the WeakDisposerRecord be disposed. + * @param rec the WeakDisposerRecord object + * @see DisposerRecord + */ + private synchronized void add(WeakDisposerRecord rec) { + records.add(rec); + } + public void run() { while (true) { try { diff --git a/modules/javafx.web/src/main/native/Source/WebCore/bindings/scripts/CodeGeneratorJava.pm b/modules/javafx.web/src/main/native/Source/WebCore/bindings/scripts/CodeGeneratorJava.pm --- a/modules/javafx.web/src/main/native/Source/WebCore/bindings/scripts/CodeGeneratorJava.pm +++ b/modules/javafx.web/src/main/native/Source/WebCore/bindings/scripts/CodeGeneratorJava.pm @@ -1008,6 +1008,7 @@ push(@contentJava, " }\n"); push(@contentJava, " ${javaClassName} node = (${javaClassName})createInterface(peer);\n"); push(@contentJava, " SelfDisposer disposer = new SelfDisposer(node, peer);\n"); + push(@contentJava, " Disposer.addRecord(disposer);\n"); push(@contentJava, " disposer.next = head;\n"); push(@contentJava, " hashTable[hash] = disposer;\n"); push(@contentJava, " if (3 * hashCount >= 2 * hashTable.length)\n");