| Index: base/files/file_path_watcher_linux.cc | 
| diff --git a/base/files/file_path_watcher_linux.cc b/base/files/file_path_watcher_linux.cc | 
| index 9589e9b788dce7807ac0b97a011e6012e6b47860..df4189cd2c9adc71af4fcc9e18a709ae0d80d431 100644 | 
| --- a/base/files/file_path_watcher_linux.cc | 
| +++ b/base/files/file_path_watcher_linux.cc | 
| @@ -24,7 +24,6 @@ | 
| #include "base/files/file_enumerator.h" | 
| #include "base/files/file_path.h" | 
| #include "base/files/file_util.h" | 
| -#include "base/lazy_instance.h" | 
| #include "base/location.h" | 
| #include "base/logging.h" | 
| #include "base/macros.h" | 
| @@ -63,14 +62,12 @@ class InotifyReader { | 
| void OnInotifyEvent(const inotify_event* event); | 
|  | 
| private: | 
| -  friend struct DefaultLazyInstanceTraits<InotifyReader>; | 
| - | 
| +  friend InotifyReader* GetInotifyReader(); | 
| typedef std::set<FilePathWatcherImpl*> WatcherSet; | 
|  | 
| InotifyReader(); | 
| -  // There is no destructor because |g_inotify_reader| is a | 
| -  // base::LazyInstace::Leaky object. Having a destructor causes build | 
| -  // issues with GCC 6 (http://crbug.com/636346). | 
| +  // There is no destructor because GetInotifyReader() is leaky. Having a | 
| +  // destructor causes build issues with GCC 6 (http://crbug.com/636346). | 
|  | 
| // We keep track of which delegates want to be notified on which watches. | 
| hash_map<Watch, WatcherSet> watchers_; | 
| @@ -243,8 +240,10 @@ void InotifyReaderCallback(InotifyReader* reader, int inotify_fd) { | 
| } | 
| } | 
|  | 
| -static LazyInstance<InotifyReader>::Leaky g_inotify_reader = | 
| -    LAZY_INSTANCE_INITIALIZER; | 
| +InotifyReader* GetInotifyReader() { | 
| +  static auto inotify_reader = new InotifyReader(); | 
| +  return inotify_reader; | 
| +} | 
|  | 
| InotifyReader::InotifyReader() | 
| : thread_("inotify_reader"), | 
| @@ -458,7 +457,7 @@ void FilePathWatcherImpl::Cancel() { | 
| callback_.Reset(); | 
|  | 
| for (size_t i = 0; i < watches_.size(); ++i) | 
| -    g_inotify_reader.Get().RemoveWatch(watches_[i].watch, this); | 
| +    GetInotifyReader()->RemoveWatch(watches_[i].watch, this); | 
| watches_.clear(); | 
| target_.clear(); | 
| RemoveRecursiveWatches(); | 
| @@ -477,7 +476,7 @@ void FilePathWatcherImpl::UpdateWatches() { | 
| InotifyReader::Watch old_watch = watch_entry.watch; | 
| watch_entry.watch = InotifyReader::kInvalidWatch; | 
| watch_entry.linkname.clear(); | 
| -    watch_entry.watch = g_inotify_reader.Get().AddWatch(path, this); | 
| +    watch_entry.watch = GetInotifyReader()->AddWatch(path, this); | 
| if (watch_entry.watch == InotifyReader::kInvalidWatch) { | 
| // Ignore the error code (beyond symlink handling) to attempt to add | 
| // watches on accessible children of unreadable directories. Note that | 
| @@ -487,7 +486,7 @@ void FilePathWatcherImpl::UpdateWatches() { | 
| AddWatchForBrokenSymlink(path, &watch_entry); | 
| } | 
| if (old_watch != watch_entry.watch) | 
| -      g_inotify_reader.Get().RemoveWatch(old_watch, this); | 
| +      GetInotifyReader()->RemoveWatch(old_watch, this); | 
| path = path.Append(watch_entry.subdir); | 
| } | 
|  | 
| @@ -533,7 +532,7 @@ void FilePathWatcherImpl::UpdateRecursiveWatches( | 
| if (!changed_dir.IsParent(cur_path)) | 
| break; | 
| if (!DirectoryExists(cur_path)) | 
| -      g_inotify_reader.Get().RemoveWatch(end_it->second, this); | 
| +      GetInotifyReader()->RemoveWatch(end_it->second, this); | 
| } | 
| recursive_watches_by_path_.erase(start_it, end_it); | 
| UpdateRecursiveWatchesForPath(changed_dir); | 
| @@ -558,17 +557,15 @@ void FilePathWatcherImpl::UpdateRecursiveWatchesForPath(const FilePath& path) { | 
|  | 
| if (!ContainsKey(recursive_watches_by_path_, current)) { | 
| // Add new watches. | 
| -      InotifyReader::Watch watch = | 
| -          g_inotify_reader.Get().AddWatch(current, this); | 
| +      InotifyReader::Watch watch = GetInotifyReader()->AddWatch(current, this); | 
| TrackWatchForRecursion(watch, current); | 
| } else { | 
| // Update existing watches. | 
| InotifyReader::Watch old_watch = recursive_watches_by_path_[current]; | 
| DCHECK_NE(InotifyReader::kInvalidWatch, old_watch); | 
| -      InotifyReader::Watch watch = | 
| -          g_inotify_reader.Get().AddWatch(current, this); | 
| +      InotifyReader::Watch watch = GetInotifyReader()->AddWatch(current, this); | 
| if (watch != old_watch) { | 
| -        g_inotify_reader.Get().RemoveWatch(old_watch, this); | 
| +        GetInotifyReader()->RemoveWatch(old_watch, this); | 
| recursive_paths_by_watch_.erase(old_watch); | 
| recursive_watches_by_path_.erase(current); | 
| TrackWatchForRecursion(watch, current); | 
| @@ -600,7 +597,7 @@ void FilePathWatcherImpl::RemoveRecursiveWatches() { | 
| recursive_paths_by_watch_.begin(); | 
| it != recursive_paths_by_watch_.end(); | 
| ++it) { | 
| -    g_inotify_reader.Get().RemoveWatch(it->first, this); | 
| +    GetInotifyReader()->RemoveWatch(it->first, this); | 
| } | 
| recursive_paths_by_watch_.clear(); | 
| recursive_watches_by_path_.clear(); | 
| @@ -621,7 +618,7 @@ void FilePathWatcherImpl::AddWatchForBrokenSymlink(const FilePath& path, | 
| // changes to a component "/" which is harmless so no special treatment of | 
| // this case is required. | 
| InotifyReader::Watch watch = | 
| -      g_inotify_reader.Get().AddWatch(link.DirName(), this); | 
| +      GetInotifyReader()->AddWatch(link.DirName(), this); | 
| if (watch == InotifyReader::kInvalidWatch) { | 
| // TODO(craig) Symlinks only work if the parent directory for the target | 
| // exist. Ideally we should make sure we've watched all the components of | 
|  |