diff options
| author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-03-24 23:19:38 -0500 |
|---|---|---|
| committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-03-24 23:19:38 -0500 |
| commit | 781c99c39ccb9606d1f245fdf9c45a99e10086cb (patch) | |
| tree | 41ad48b0d77feab38d26299e7973c1b6fa263370 /src/cryptography | |
| parent | 53f947e99e972ef669f833a19b3d36e3fbd7b5da (diff) | |
| parent | 97a034190e4fe2a65704a8135e19b0ac6ae8c7f9 (diff) | |
| download | cryptography-781c99c39ccb9606d1f245fdf9c45a99e10086cb.tar.gz | |
Merge pull request #1779 from alex/threadsafe-init
Merge pull request #1777 from alex/threadsafe-init
Diffstat (limited to 'src/cryptography')
| -rw-r--r-- | src/cryptography/hazmat/bindings/commoncrypto/binding.py | 15 | ||||
| -rw-r--r-- | src/cryptography/hazmat/bindings/openssl/binding.py | 17 |
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 79a163688..afb90660f 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, ) @@ -35,6 +37,7 @@ class Binding(object): ], ) lib = None + _init_lock = threading.Lock() def __init__(self): self._ensure_ffi_initialized() @@ -44,8 +47,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 cf456e9f8..5ccee9743 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): |
