virtual bool DoRemove(wxSharedPtr<wxFSWatchEntryUnix> watch) { wxCHECK_MSG( IsOk(), false, "Inotify not initialized or invalid inotify descriptor" ); int ret = DoRemoveInotify(watch.get()); if (ret == -1) { // Failures can happen if a dir is deleted just before we try to // remove the watch. I think there's a race between calling this // code and IN_DELETE_SELF arriving. So just warn. wxFileSystemWatcherEvent event ( wxFSW_EVENT_WARNING, wxFSW_WARNING_GENERAL, wxString::Format ( _("Unable to remove inotify watch %i"), watch->GetWatchDescriptor() ) ); SendEvent(event); } if (m_watchMap.erase(watch->GetWatchDescriptor()) != 1) { wxFAIL_MSG( wxString::Format("Path %s is not watched", watch->GetPath()) ); } // Cache the wd in case any events arrive late m_staleDescriptors.Add(watch->GetWatchDescriptor()); watch->SetWatchDescriptor(-1); return true; }
virtual bool DoRemove(wxSharedPtr<wxFSWatchEntryUnix> watch) { wxCHECK_MSG( IsOk(), false, "Inotify not initialized or invalid inotify descriptor" ); int ret = DoRemoveInotify(watch.get()); if (ret == -1) { wxLogSysError( _("Unable to remove inotify watch") ); return false; } if (m_watchMap.erase(watch->GetWatchDescriptor()) != 1) { wxFAIL_MSG( wxString::Format("Path %s is not watched", watch->GetPath()) ); } watch->SetWatchDescriptor(-1); return true; }
virtual bool DoAdd(wxSharedPtr<wxFSWatchEntryUnix> watch) { wxCHECK_MSG( IsOk(), false, "Inotify not initialized or invalid inotify descriptor" ); int wd = DoAddInotify(watch.get()); if (wd == -1) { wxLogSysError( _("Unable to add inotify watch") ); return false; } wxFSWatchEntryDescriptors::value_type val(wd, watch.get()); if (!m_watchMap.insert(val).second) { wxFAIL_MSG( wxString::Format( "Path %s is already watched", watch->GetPath()) ); return false; } return true; }