From fbd7d7f2adb5dfb66175e5a2f77e4e0c4a640107 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 24 Mar 2015 19:33:43 -0400 Subject: Fixes #1776 -- ensure that we only init bindings once per process --- .../hazmat/bindings/commoncrypto/binding.py | 15 ++++++++++----- 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 f48b59cb..0a284ab6 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 self._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..7f379f08 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 self._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): -- cgit v1.2.3 From 47e6b2361ef06871d271d100c057319cc12043b7 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Tue, 24 Mar 2015 19:40:53 -0400 Subject: Doh --- src/cryptography/hazmat/bindings/commoncrypto/binding.py | 2 +- src/cryptography/hazmat/bindings/openssl/binding.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptography/hazmat/bindings/commoncrypto/binding.py b/src/cryptography/hazmat/bindings/commoncrypto/binding.py index 0a284ab6..54c7603d 100644 --- a/src/cryptography/hazmat/bindings/commoncrypto/binding.py +++ b/src/cryptography/hazmat/bindings/commoncrypto/binding.py @@ -48,7 +48,7 @@ class Binding(object): if cls.lib is not None: return - with self._init_lock: + with cls._init_lock: if cls.lib is None: cls.lib = load_library_for_binding( cls.ffi, diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 7f379f08..5ccee974 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -118,7 +118,7 @@ class Binding(object): if cls.lib is not None: return - with self._init_lock: + with cls._init_lock: if cls.lib is None: cls.lib = load_library_for_binding( cls.ffi, -- cgit v1.2.3