Chromium Code Reviews| Index: base/nss_init.cc |
| diff --git a/base/nss_init.cc b/base/nss_init.cc |
| index e25232c10c40d7529b8db82f0174f9f94deb1ade..64384bca3cbd0f20678db310e005dd83c229b7f4 100644 |
| --- a/base/nss_init.cc |
| +++ b/base/nss_init.cc |
| @@ -1,4 +1,4 @@ |
| -// Copyright (c) 2008 The Chromium Authors. All rights reserved. |
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
|
wtc
2009/09/02 01:17:17
This should be 2008-2009.
|
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| @@ -56,6 +56,23 @@ SECMODModule *InitDefaultRootCerts() { |
| return NULL; |
| } |
| +// A singleton to initialize/deinitialize NSPR. |
| +// Separate from the NSS singleton because we initialize it on the UI thread. |
|
wtc
2009/09/02 01:17:17
Nit: it => NSPR (otherwise it's not clear what "it
|
| +class NSPRInitSingleton { |
| + public: |
| + NSPRInitSingleton() { |
| + PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0); |
| + } |
| + |
| + ~NSPRInitSingleton() { |
| + PRStatus prstatus = PR_Cleanup(); |
| + if (prstatus != PR_SUCCESS) { |
| + LOG(ERROR) << "PR_Cleanup failed; " |
| + "Is NSPR getting destroyed on wrong thread?"; |
|
wtc
2009/09/02 01:17:17
Since Singleton destructors run on the main thread
|
| + } |
| + } |
| +}; |
| + |
| class NSSInitSingleton { |
| public: |
| NSSInitSingleton() { |
| @@ -139,14 +156,6 @@ class NSSInitSingleton { |
| } |
| PL_ArenaFinish(); |
| - |
| - PRStatus prstatus = PR_Cleanup(); |
| - if (prstatus != PR_SUCCESS) { |
| - // We LOG(ERROR) here because this failure is bad: it indicates |
| - // NSPR isn't initialized and cleaned up on the same thread. |
| - LOG(ERROR) << "PR_Cleanup failed; see " |
| - "http://code.google.com/p/chromium/issues/detail?id=18410"; |
| - } |
| } |
| private: |
| @@ -157,6 +166,10 @@ class NSSInitSingleton { |
| namespace base { |
| +void EnsureNSPRInit() { |
| + Singleton<NSPRInitSingleton>::get(); |
| +} |
| + |
| void EnsureNSSInit() { |
| Singleton<NSSInitSingleton>::get(); |
| } |