[ 
https://issues.apache.org/jira/browse/VFS-299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16945611#comment-16945611
 ] 

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|https://github.com/f4lco/vfs-repro/blob/master/src/test/java/vfs/MinimalFileMonitorBug.java]
 as well as my [simplified 
version|https://github.com/f4lco/vfs-repro/blob/master/src/test/java/vfs/FileMonitorAddRemoveTest.java]
 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: https://issues.apache.org/jira/browse/VFS-299
>             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
(v8.3.4#803005)

Reply via email to