/*static*/ status_t BPathMonitor::StopWatching(const char* path, BMessenger target) { if (sLocker == NULL) return B_NO_INIT; TRACE("StopWatching(%s)\n", path); BAutolock _(sLocker); WatcherMap::iterator iterator = sWatchers.find(target); if (iterator == sWatchers.end()) return B_BAD_VALUE; Watcher* watcher = iterator->second; HandlerMap::iterator i = watcher->handlers.find(path); if (i == watcher->handlers.end()) return B_BAD_VALUE; PathHandler* handler = i->second; watcher->handlers.erase(i); handler->Quit(); if (watcher->handlers.empty()) { sWatchers.erase(iterator); delete watcher; } return B_OK; }
/*static*/ status_t BPathMonitor::StopWatching(BMessenger target) { if (sLocker == NULL) return B_NO_INIT; BAutolock _(sLocker); WatcherMap::iterator iterator = sWatchers.find(target); if (iterator == sWatchers.end()) return B_BAD_VALUE; Watcher* watcher = iterator->second; while (!watcher->handlers.empty()) { HandlerMap::iterator i = watcher->handlers.begin(); PathHandler* handler = i->second; watcher->handlers.erase(i); handler->Quit(); } sWatchers.erase(iterator); delete watcher; return B_OK; }