diff --git a/src/efsw/FileWatcherWin32.cpp b/src/efsw/FileWatcherWin32.cpp index 5c8d95a..05a20d6 100644 --- a/src/efsw/FileWatcherWin32.cpp +++ b/src/efsw/FileWatcherWin32.cpp @@ -144,7 +144,8 @@ void FileWatcherWin32::run() { break; } else { Lock lock( mWatchesLock ); - WatchCallback( numOfBytes, ov ); + if (mWatches.find( (WatcherStructWin32*)ov ) != mWatches.end()) + WatchCallback( numOfBytes, ov ); } } } else { diff --git a/src/efsw/FileWatcherWin32.hpp b/src/efsw/FileWatcherWin32.hpp index 9cc7d59..3016aac 100644 --- a/src/efsw/FileWatcherWin32.hpp +++ b/src/efsw/FileWatcherWin32.hpp @@ -7,7 +7,7 @@ #include #include -#include +#include #include namespace efsw { @@ -17,7 +17,7 @@ namespace efsw { class FileWatcherWin32 : public FileWatcherImpl { public: /// type for a map from WatchID to WatcherWin32 pointer - typedef std::set Watches; + typedef std::unordered_set Watches; FileWatcherWin32( FileWatcher* parent ); diff --git a/src/efsw/WatcherWin32.cpp b/src/efsw/WatcherWin32.cpp index d47d269..d06cc92 100644 --- a/src/efsw/WatcherWin32.cpp +++ b/src/efsw/WatcherWin32.cpp @@ -215,17 +215,14 @@ void DestroyWatch( WatcherStructWin32* pWatch ) { CloseHandle( pWatch->Watch->DirHandle ); efSAFE_DELETE_ARRAY( pWatch->Watch->DirName ); efSAFE_DELETE( pWatch->Watch ); + efSAFE_DELETE( pWatch ); } } /// Starts monitoring a directory. WatcherStructWin32* CreateWatch( LPCWSTR szDirectory, bool recursive, DWORD bufferSize, DWORD notifyFilter, HANDLE iocp ) { - WatcherStructWin32* tWatch; - size_t ptrsize = sizeof( *tWatch ); - tWatch = static_cast( - HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, ptrsize ) ); - + WatcherStructWin32* tWatch = new WatcherStructWin32(); WatcherWin32* pWatch = new WatcherWin32(bufferSize); if (tWatch) tWatch->Watch = pWatch; @@ -246,7 +243,7 @@ WatcherStructWin32* CreateWatch( LPCWSTR szDirectory, bool recursive, CloseHandle( pWatch->DirHandle ); efSAFE_DELETE( pWatch->Watch ); - HeapFree( GetProcessHeap(), 0, tWatch ); + efSAFE_DELETE( tWatch ); return NULL; }