static void RemoveWatchedFile(WatchedFile* wf) { WatchedDir* wd = wf->watchedDir; bool ok = ListRemove(&g_watchedFiles, wf); CrashIf(!ok); bool needsAwakeThread = wf->isManualCheck; DeleteWatchedFile(wf); if (needsAwakeThread) AwakeWatcherThread(); else RemoveWatchedDirIfNotReferenced(wd); }
static void RemoveWatchedFile(WatchedFile *wf) { WatchedDir *wd = wf->watchedDir; WatchedFile **currPtr = &g_firstFile; WatchedFile *curr; for (;;) { curr = *currPtr; CrashAlwaysIf(!curr); if (curr == wf) break; currPtr = &(curr->next); } WatchedFile *toRemove = curr; *currPtr = toRemove->next; DeleteWatchedFile(toRemove); RemoveWatchedDirIfNotReferenced(wd); }