Opened 5 years ago

Last modified 5 years ago

#19793 new task

RFC: Memory leaks: Bad programming pattern reg. listeners — at Initial Version

Reported by: GerdP Owned by: team
Priority: normal Milestone:
Component: Core Version:
Keywords: Cc:

Description

I've noticed that a lot of memory leaks occur where source code contains eithe this regex pattern
[Mm]ain.*Listener\(new
This matches eg.

  MainApplication.getLayerManager().addLayerChangeListener(new GpxLayerAddedListener());

or 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.

Change History (0)

Note: See TracTickets for help on using tickets.