This PR is a fix for 
[JDK-8232824](https://bugs.openjdk.java.net/browse/JDK-8232824)
This issue is regression of 
[JDK-8187074](https://bugs.openjdk.java.net/browse/JDK-8187074).

Issue.
- `Parent.viewOrderChildren` is a list of children sorted according to view 
order.
- `Parent.viewOrderChildren` is cleared and computed in 
`Parent.computeViewOrderChildren()` which is called from 
`Parent.doUpdatePeer()` when a `pulse `is received.

- Below is the scenario mentioned in this issue,
1. `TabPane` is created with few `tabs`.
2. For each tab,  a `TabHeaderSkin` is created with `setViewOrder(1)` and is 
added to `TabHeaderArea.headersRegion`
3. All these `TabHeaderSkin`s are added to `Parent.viewOrderChildren` on 
`pulse`.
4. When the `TabPane` is removed from scene, then on the next pulse the method 
`Parent.doUpdatePeer()` does not get called for `TabHeaderArea.headersRegion`, 
because it is not part for scenegraph anymore.
So `Parent.computeViewOrderChildren()` does not get called and the 
`Parent.viewOrderChildren` does not get cleared, which causes the leak.

Fix:
Clear the `Parent.viewOrderChildren` list when marking 
`DirtyBits.PARENT_CHILDREN_VIEW_ORDER` as dirty.
`Parent.viewOrderChildren` will be computed on next `pulse`.
This will maintain lazy computation of `Parent.viewOrderChildren`. 

Added a system test, fails without fix and passes with. No failures in existing 
tests.

-------------

Commits:
 - cbcc3161: [WIP] 8232824: Removing TabPane with strong referenced content 
causes memory leak from weak one

Changes: https://git.openjdk.java.net/jfx/pull/79/files
 Webrev: https://webrevs.openjdk.java.net/jfx/79/webrev.00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8232824
  Stats: 120 lines in 2 files changed: 118 ins; 0 del; 2 mod
  Patch: https://git.openjdk.java.net/jfx/pull/79.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/79/head:pull/79

PR: https://git.openjdk.java.net/jfx/pull/79

Reply via email to