| Index: chrome/browser/process_singleton_win.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/process_singleton_win.cc	(revision 142436)
 | 
| +++ chrome/browser/process_singleton_win.cc	(working copy)
 | 
| @@ -199,7 +199,14 @@
 | 
|  }
 | 
|  
 | 
|  ProcessSingleton::~ProcessSingleton() {
 | 
| -  Cleanup();
 | 
| +  // We need to unregister the window as late as possible so that we can detect
 | 
| +  // another instance of chrome running. Otherwise we may end up writing out
 | 
| +  // data while a new chrome is starting up.
 | 
| +  if (window_) {
 | 
| +    ::DestroyWindow(window_);
 | 
| +    ::UnregisterClass(chrome::kMessageWindowClass,
 | 
| +                      base::GetModuleFromAddress(&ThunkWndProc));
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcess() {
 | 
| @@ -302,18 +309,6 @@
 | 
|  }
 | 
|  
 | 
|  void ProcessSingleton::Cleanup() {
 | 
| -  // Window classes registered by DLLs are not cleaned up automatically on
 | 
| -  // process exit, so we must unregister at the earliest chance possible.
 | 
| -  // During the fast shutdown sequence, ProcessSingleton::Cleanup() is
 | 
| -  // called if our process was the first to start.  Therefore we try cleaning
 | 
| -  // up here, and again in the destructor if needed to catch as many cases
 | 
| -  // as possible.
 | 
| -  if (window_) {
 | 
| -    ::DestroyWindow(window_);
 | 
| -    ::UnregisterClass(chrome::kMessageWindowClass,
 | 
| -                      base::GetModuleFromAddress(&ThunkWndProc));
 | 
| -    window_ = NULL;
 | 
| -  }
 | 
|  }
 | 
|  
 | 
|  LRESULT ProcessSingleton::OnCopyData(HWND hwnd, const COPYDATASTRUCT* cds) {
 | 
| 
 |