Correct handling of IN_Q_OVERFLOW in wxFileSystemWatcher Linux code.

Don't use wd field if it's -1 which can happen for IN_Q_OVERFLOW.

See #14854.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73063 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-11-29 22:02:36 +00:00
parent 94323b60e3
commit 8ded8d08ab

View File

@@ -236,25 +236,29 @@ protected:
// get watch entry for this event
wxFSWatchEntryDescriptors::iterator it = m_watchMap.find(inevt.wd);
if (it == m_watchMap.end())
{
// It's not in the map; check if was recently removed from it.
if (m_staleDescriptors.Index(inevt.wd) != wxNOT_FOUND)
{
wxLogTrace(wxTRACE_FSWATCHER,
"Got an event for stale wd %i", inevt.wd);
}
else
{
wxFAIL_MSG("Event for unknown watch descriptor.");
}
// In any case, don't process this event: it's either for an
// already removed entry, or for a completely unknown one.
return;
// wd will be -1 for IN_Q_OVERFLOW, which would trigger the wxFAIL_MSG
if (inevt.wd != -1)
{
if (it == m_watchMap.end())
{
// It's not in the map; check if was recently removed from it.
if (m_staleDescriptors.Index(inevt.wd) != wxNOT_FOUND)
{
wxLogTrace(wxTRACE_FSWATCHER,
"Got an event for stale wd %i", inevt.wd);
}
else
{
wxFAIL_MSG("Event for unknown watch descriptor.");
}
// In any case, don't process this event: it's either for an
// already removed entry, or for a completely unknown one.
return;
}
}
wxFSWatchEntry& watch = *(it->second);
int nativeFlags = inevt.mask;
int flags = Native2WatcherFlags(nativeFlags);
@@ -264,7 +268,11 @@ protected:
wxString errMsg = GetErrorDescription(nativeFlags);
wxFileSystemWatcherEvent event(flags, errMsg);
SendEvent(event);
return;
}
wxFSWatchEntry& watch = *(it->second);
// Now IN_UNMOUNT. We must do so here, as it's not in the watch flags
if (nativeFlags & IN_UNMOUNT)
{