Skip to content

Commit

Permalink
Clear out ClientCache when UI is detached to prevent a minor memory l…
Browse files Browse the repository at this point in the history
…eak (#12220)

* Clear out ClientCache when UI is detached to prevent a minor memory leak (#12199)

* Clear out ClientCache when UI is detached to prevent a minor memory leak

Implemented with a listener rather than direct call from UI.detach() in
order to avoid new public API, since the whole feature has been marked
for removal. This doesn't yet prevent the cache or the type map from
getting slightly bloated during the UI's lifetime.

See: #3705
  • Loading branch information
Ansku authored Mar 5, 2021
1 parent 174cfd8 commit 1f8d79a
Showing 1 changed file with 15 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -232,10 +232,25 @@ public ClientCache getClientCache(UI uI) {
if (cache == null) {
cache = new ClientCache();
uiToClientCache.put(uiId, cache);
uI.addDetachListener(event -> removeClientCache(uI));
}
return cache;
}

/**
* Clear out client cache for the given UI. This should be called when the
* UI is detached and the cache becomes obsolete.
*
* @param uI
* the UI whose client cache should be removed
* @deprecated because this cleanup is only needed for a deprecated feature
*/
@Deprecated
private void removeClientCache(UI uI) {
Integer uiId = Integer.valueOf(uI.getUIId());
uiToClientCache.remove(uiId);
}

/**
* Checks if the connector is visible in context. For Components,
* {@link #isComponentVisibleToClient(Component)} is used. For other types
Expand Down

0 comments on commit 1f8d79a

Please sign in to comment.