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,6 +236,10 @@ protected:
// get watch entry for this event // get watch entry for this event
wxFSWatchEntryDescriptors::iterator it = m_watchMap.find(inevt.wd); wxFSWatchEntryDescriptors::iterator it = m_watchMap.find(inevt.wd);
// wd will be -1 for IN_Q_OVERFLOW, which would trigger the wxFAIL_MSG
if (inevt.wd != -1)
{
if (it == m_watchMap.end()) if (it == m_watchMap.end())
{ {
// It's not in the map; check if was recently removed from it. // It's not in the map; check if was recently removed from it.
@@ -253,8 +257,8 @@ protected:
// already removed entry, or for a completely unknown one. // already removed entry, or for a completely unknown one.
return; return;
} }
}
wxFSWatchEntry& watch = *(it->second);
int nativeFlags = inevt.mask; int nativeFlags = inevt.mask;
int flags = Native2WatcherFlags(nativeFlags); int flags = Native2WatcherFlags(nativeFlags);
@@ -264,7 +268,11 @@ protected:
wxString errMsg = GetErrorDescription(nativeFlags); wxString errMsg = GetErrorDescription(nativeFlags);
wxFileSystemWatcherEvent event(flags, errMsg); wxFileSystemWatcherEvent event(flags, errMsg);
SendEvent(event); SendEvent(event);
return;
} }
wxFSWatchEntry& watch = *(it->second);
// Now IN_UNMOUNT. We must do so here, as it's not in the watch flags // Now IN_UNMOUNT. We must do so here, as it's not in the watch flags
if (nativeFlags & IN_UNMOUNT) if (nativeFlags & IN_UNMOUNT)
{ {