if !ok {
return errors.New(fmt.Sprintf("can't remove non-existent kevent watch for: %s", path))
}
- syscall.Close(watchfd)
watchEntry := &w.kbuf[0]
syscall.SetKevent(watchEntry, w.watches[path], syscall.EVFILT_VNODE, syscall.EV_DELETE)
success, errno := syscall.Kevent(w.kq, w.kbuf[:], nil, nil)
} else if (watchEntry.Flags & syscall.EV_ERROR) == syscall.EV_ERROR {
return errors.New("kevent rm error")
}
+ syscall.Close(watchfd)
delete(w.watches, path)
return nil
}
for _, fileInfo := range files {
if fileInfo.IsDir() == false {
filePath := filepath.Join(dirPath, fileInfo.Name())
- if w.watches[filePath] == 0 {
+ _, watchFound := w.watches[filePath]
+ if watchFound == false {
w.fsnFlags[filePath] = FSN_ALL
// Send create event
fileEvent := new(FileEvent)
t.Fatalf("rename failed: %s", err)
}
- // Modify the file outside of the watched dir
+ // Modify the file outside of the watched dir
f.WriteString("data")
f.Sync()
- f.Close()
+ f.Close()
time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete
- // Recreate the file that was moved
+ // Recreate the file that was moved
f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
t.Fatalf("creating test file failed: %s", err)
}
- f.Close()
+ f.Close()
time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete
// We expect this event to be received almost immediately, but let's wait 500 ms to be sure
if deleteReceived != 0 {
t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", deleteReceived, 0)
}
- if renameReceived != 1 {
+ if renameReceived != 1 {
t.Fatalf("incorrect number of rename events received after 500 ms (%d vs %d)", renameReceived, 1)
- }
+ }
// Try closing the fsnotify instance
t.Log("calling Close()")
}
}
-
func TestFsnotifyDirOnly(t *testing.T) {
// Create an fsnotify watcher instance and initialize it
watcher, err := NewWatcher()