diff --git a/far/filesystemwatcher.cpp b/far/filesystemwatcher.cpp index dd9f77cc60..9c83e409d4 100644 --- a/far/filesystemwatcher.cpp +++ b/far/filesystemwatcher.cpp @@ -60,6 +60,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. class background_watcher: public singleton { + IMPLEMENTS_SINGLETON; + public: void add(const FileSystemWatcher* Client) { @@ -116,7 +118,12 @@ class background_watcher: public singleton const auto Result = os::handle::wait_any(m_Handles); if (Result == 0) + { + if (m_Exit) + return; + continue; + } { SCOPED_ACTION(std::scoped_lock)(m_CS); @@ -136,12 +143,19 @@ class background_watcher: public singleton } } + ~background_watcher() + { + m_Exit = true; + m_Update.set(); + } + os::critical_section m_CS; os::event m_Update{ os::event::type::automatic, os::event::state::nonsignaled }, m_UpdateDone{ os::event::type::automatic, os::event::state::nonsignaled }; std::vector m_Clients; std::vector m_Handles{ m_Update.native_handle() }; + std::atomic_bool m_Exit{}; os::thread m_Thread; };