}
else
{
- wxFAIL_MSG("Event for unknown watch descriptor.");
+ // In theory we shouldn't reach here. In practice, some
+ // events, e.g. IN_MODIFY, arrive just after the IN_IGNORED
+ // so their wd has already been discarded. Warn about them.
+ wxFileSystemWatcherEvent
+ event
+ (
+ wxFSW_EVENT_WARNING,
+ wxString::Format
+ (
+ _("Unexpected event for \"%s\": no "
+ "matching watch descriptor."),
+ inevt.len ? inevt.name : ""
+ )
+ );
+ SendEvent(event);
+
}
// In any case, don't process this event: it's either for an
- // already removed entry, or for a completely unknown one.
+ // already removed entry, or for an unknown one.
return;
}
}
// get watch entry for this event
wxFSWatchEntryDescriptors::iterator wit = m_watchMap.find(inevt.wd);
- wxCHECK_RET(wit != m_watchMap.end(),
- "Watch descriptor not present in the watch map!");
-
- // Tell the owner, in case it's interested
- // If there's a filespec, assume he's not
- wxFSWatchEntry& watch = *(wit->second);
- if ( watch.GetFilespec().empty() )
+ if (wit == m_watchMap.end())
{
- int flags = Native2WatcherFlags(inevt.mask);
- wxFileName path = GetEventPath(watch, inevt);
+ wxLogTrace(wxTRACE_FSWATCHER,
+ "Watch descriptor not present in the watch map!");
+ }
+ else
+ {
+ // Tell the owner, in case it's interested
+ // If there's a filespec, assume he's not
+ wxFSWatchEntry& watch = *(wit->second);
+ if ( watch.GetFilespec().empty() )
{
- wxFileSystemWatcherEvent event(flags, path, path);
- SendEvent(event);
+ int flags = Native2WatcherFlags(inevt.mask);
+ wxFileName path = GetEventPath(watch, inevt);
+ {
+ wxFileSystemWatcherEvent event(flags, path, path);
+ SendEvent(event);
+ }
}
}