aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2015-03-24 20:18:15 -0500
committerPaul Kehrer <paul.l.kehrer@gmail.com>2015-03-24 20:18:15 -0500
commitb6e094d475cc8456adac9e10b3095e2883dcc3ee (patch)
tree772d6b12e910531dfb0403be806eb9de8d8364a8
parent1a12b51dda7029cbff9ffd15fb0c258a4de9e6aa (diff)
parent47e6b2361ef06871d271d100c057319cc12043b7 (diff)
downloadcryptography-b6e094d475cc8456adac9e10b3095e2883dcc3ee.tar.gz
cryptography-b6e094d475cc8456adac9e10b3095e2883dcc3ee.tar.bz2
cryptography-b6e094d475cc8456adac9e10b3095e2883dcc3ee.zip
Merge pull request #1777 from alex/threadsafe-init
Fixes #1776 -- ensure that we only init bindings once per process
-rw-r--r--src/cryptography/hazmat/bindings/commoncrypto/binding.py15
-rw-r--r--src/cryptography/hazmat/bindings/openssl/binding.py17
2 files changed, 20 insertions, 12 deletions
diff --git a/src/cryptography/hazmat/bindings/commoncrypto/binding.py b/src/cryptography/hazmat/bindings/commoncrypto/binding.py
index f48b59cb..54c7603d 100644
--- a/src/cryptography/hazmat/bindings/commoncrypto/binding.py
+++ b/src/cryptography/hazmat/bindings/commoncrypto/binding.py
@@ -4,6 +4,8 @@
from __future__ import absolute_import, division, print_function
+import threading
+
from cryptography.hazmat.bindings.utils import (
build_ffi_for_binding, load_library_for_binding,
)
@@ -36,6 +38,7 @@ class Binding(object):
],
)
lib = None
+ _init_lock = threading.Lock()
def __init__(self):
self._ensure_ffi_initialized()
@@ -45,8 +48,10 @@ class Binding(object):
if cls.lib is not None:
return
- cls.lib = load_library_for_binding(
- cls.ffi,
- module_prefix=cls._module_prefix,
- modules=cls._modules,
- )
+ with cls._init_lock:
+ if cls.lib is None:
+ cls.lib = load_library_for_binding(
+ cls.ffi,
+ module_prefix=cls._module_prefix,
+ modules=cls._modules,
+ )
diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py
index cf456e9f..5ccee974 100644
--- a/src/cryptography/hazmat/bindings/openssl/binding.py
+++ b/src/cryptography/hazmat/bindings/openssl/binding.py
@@ -98,6 +98,7 @@ class Binding(object):
_locks = None
_lock_cb_handle = None
+ _init_lock = threading.Lock()
_lock_init_lock = threading.Lock()
ffi = build_ffi_for_binding(
@@ -117,14 +118,16 @@ class Binding(object):
if cls.lib is not None:
return
- cls.lib = load_library_for_binding(
- cls.ffi,
- cls._module_prefix,
- cls._modules,
- )
+ with cls._init_lock:
+ if cls.lib is None:
+ cls.lib = load_library_for_binding(
+ cls.ffi,
+ cls._module_prefix,
+ cls._modules,
+ )
- res = cls.lib.Cryptography_add_osrandom_engine()
- assert res != 0
+ res = cls.lib.Cryptography_add_osrandom_engine()
+ assert res != 0
@classmethod
def init_static_locks(cls):