| Index: runtime/bin/secure_socket.cc
|
| diff --git a/runtime/bin/secure_socket.cc b/runtime/bin/secure_socket.cc
|
| index d270c4734e2c68d79446d2bd3c5ce6babf6ac58b..49248d379c88c2773cb81fd16965477d642af2de 100644
|
| --- a/runtime/bin/secure_socket.cc
|
| +++ b/runtime/bin/secure_socket.cc
|
| @@ -264,6 +264,9 @@ static Dart_Handle X509FromCertificate(CERTCertificate* certificate) {
|
|
|
|
|
| void SSLFilter::Init(Dart_Handle dart_this) {
|
| + if (!library_initialized_) {
|
| + InitializeLibrary(NULL, "", true, false);
|
| + }
|
| string_start_ = ThrowIfError(
|
| Dart_NewPersistentHandle(DartUtils::NewString("start")));
|
| string_length_ = ThrowIfError(
|
| @@ -320,7 +323,8 @@ void SSLFilter::RegisterBadCertificateCallback(Dart_Handle callback) {
|
|
|
| void SSLFilter::InitializeLibrary(const char* certificate_database,
|
| const char* password,
|
| - bool use_builtin_root_certificates) {
|
| + bool use_builtin_root_certificates,
|
| + bool report_duplicate_initialization) {
|
| MutexLocker locker(&mutex_);
|
| if (!library_initialized_) {
|
| library_initialized_ = true;
|
| @@ -362,7 +366,8 @@ void SSLFilter::InitializeLibrary(const char* certificate_database,
|
| ThrowPRException("Failed SSL_ConfigServerSessionIDCache call.");
|
| }
|
|
|
| - } else {
|
| + } else if (report_duplicate_initialization) {
|
| + mutex_.Unlock(); // MutexLocker destructor not called when throwing.
|
| ThrowException("Called SSLFilter::InitializeLibrary more than once");
|
| }
|
| }
|
|
|