Index: base/path_service.cc |
diff --git a/base/path_service.cc b/base/path_service.cc |
index e72ae7deff9af69156ab2ed994de7431009ca5d8..4ede8f6f5b1feed90c58fbda9347108083e9d643 100644 |
--- a/base/path_service.cc |
+++ b/base/path_service.cc |
@@ -266,3 +266,22 @@ void PathService::RegisterProvider(ProviderFunc func, int key_start, |
#endif |
path_data->providers = p; |
} |
+ |
+void PathService::UnregisterProvider(ProviderFunc provider) { |
+ PathData* path_data = GetPathData(); |
+ DCHECK(path_data); |
+ |
+ base::AutoLock scoped_lock(path_data->lock); |
+ |
+ for(Provider** p = &path_data->providers; *p; p = &(*p)->next) { |
+ if ((*p)->func == provider) { |
+ for(int key = (*p)->key_start; key != (*p)->key_end; ++key) { |
+ // Removed the computed path from our cache. |
+ path_data->cache.erase(key); |
+ } |
+ *p = (*p)->next; |
+ return; |
+ } |
+ } |
+ NOTREACHED(); |
+} |