# HG changeset patch
# User Chris Cannam
# Date 1545044069 0
# Node ID f1dc72b940d558bfa8fca0b5bafbc524d296f465
# Parent  cd4617b1896008a668661a09dd259db2db790671
Crude way to avoid callback on a deleted watcher on exit (macOS)

diff -r cd4617b18960 -r f1dc72b940d5 src/fswatcher.cpp
--- a/src/fswatcher.cpp	Mon Dec 17 09:50:16 2018 +0000
+++ b/src/fswatcher.cpp	Mon Dec 17 10:54:29 2018 +0000
@@ -91,6 +91,8 @@
  * drop 10.4 support for EasyMercurial.
  */
 
+static bool abandoning = false; // emergency flag for use by non-member callback
+
 FsWatcher::FsWatcher() :
     m_lastToken(0),
     m_lastCounter(0)
@@ -107,6 +109,8 @@
 
 FsWatcher::~FsWatcher()
 {
+    QMutexLocker locker(&m_mutex);
+    abandoning = true;
 }
 
 void
@@ -151,6 +155,7 @@
                  const FSEventStreamEventFlags /* eventFlags */[],
                  const FSEventStreamEventId /*eventIDs */[])
 {
+    if (abandoning) return;
     FsWatcher *watcher = reinterpret_cast<FsWatcher *>(clientCallBackInfo);
     const char *const *cpaths = reinterpret_cast<const char *const *>(paths);
     for (size_t i = 0; i < numEvents; ++i) {