Opened 4 years ago
Last modified 4 years ago
#19793 new task
RFC: Memory leaks: Bad programming pattern reg. listeners
Reported by: | GerdP | Owned by: | team |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Core | Version: | |
Keywords: | Cc: |
Description (last modified by )
I've noticed that a lot of memory leaks occur where source code contains either this regex pattern
[Mm]ain.*Listener\(new
This matches eg.
MainApplication.getLayerManager().addLayerChangeListener(new GpxLayerAddedListener());
or the pattern [Mm]ain.*Listener\(.* \-\>
Preferences.main().addPreferenceChangeListener(e -> updateSystemProperties());
Reason is quite obvious:
The code fragments create a new Listener and add it to a global list, but the ref to the new listener instance is not stored and therefore removeListener()
is never called. If the code is only executed once in a JOSM session this is no big problem but it's hard to find out, so I think we should avoid this. Even the patterns Listener\(new
and Listener\(.* \-\>
are at least error prone.
Attachments (0)
Change History (2)
comment:1 by , 4 years ago
Description: | modified (diff) |
---|
In 17055/josm: