commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Falco (Jira)" <>
Subject [jira] [Commented] (VFS-299) Listeners on DefaultFileMonitor not deregistered on stop()
Date Mon, 07 Oct 2019 06:13:00 GMT


Falco commented on VFS-299:

Hi [~ggregory],

I have doubts [~josua.troesch] is still listening in after years of inactivity. I commented
on this issue because I believe it's still relevant and my problem has a common root cause:
not removing filesystem listeners.

I'm unsure what to do about your request. In the previous comment, I linked a GitHub repository
of mine whose sole purpose is to provide a minimal, executable examples for this issue. You'll
find [Josua's original example program|] as
well as my [simplified version|] exposing
the same issue, which in fact is a unit test. If you experience any troubles reproducing,
let me know.

> Listeners on DefaultFileMonitor not deregistered on stop()
> ----------------------------------------------------------
>                 Key: VFS-299
>                 URL:
>             Project: Commons VFS
>          Issue Type: Bug
>    Affects Versions: 1.0
>         Environment: windows xp
>            Reporter: Josua Troesch
>            Priority: Minor
> If I 
> 1. register a File to a DefaultFileMonitor
> 2. stop() that DefaultFileMonitor
> 3. create a new DefaultFileMonitor and
> 4. register the same File to it
> 5. write to the File
> I get the {{FileChangeEvent}} on both listeners, on the one registered to the new DefaultFileMonitor
(as expected) but also on the one registered to the stopped DefaultFileMonitor. I tracked
it down to the {{LocalFileSystem.listenerMap}} containing both listeners for the File. In
my project I fixed this behaviour as follows:
> Extended the {{stop()}} method on {{DefaultFileMonitor}}:
> public void stop() {
>     this.shouldRun = false;
> 	// Inserted this bit
> 	for (FileMonitorAgent agent : (Collection<FileMonitorAgent>)monitorMap.values())
> 		agent.removeListeners();
> 	}
> }
> And adding the method to the {{DefaultFileMonitor$FileMonitorAgent}}:
> public void removeListeners() {
> 	file.getFileSystem().removeListener(file, fm.getFileListener());
> }

This message was sent by Atlassian Jira

View raw message