summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cramer <dcramer@gmail.com>2017-02-21 15:47:28 -0800
committerDavid Cramer <dcramer@gmail.com>2017-02-21 15:47:45 -0800
commit37563a28aac412bf88a8f82ce491135630ebefc0 (patch)
tree38d01f912931e0d38b466e6b907f9c048d7d1c6e
parent4d413e2b583714752bb4e70192d6f56672989417 (diff)
downloadraven-fix/django-sys-hook.tar.gz
Add lock around initializationfix/django-sys-hook
-rw-r--r--raven/contrib/django/models.py53
1 files changed, 31 insertions, 22 deletions
diff --git a/raven/contrib/django/models.py b/raven/contrib/django/models.py
index 8d60aa0..4772e10 100644
--- a/raven/contrib/django/models.py
+++ b/raven/contrib/django/models.py
@@ -25,8 +25,6 @@ from raven.utils.imports import import_string
logger = logging.getLogger('sentry.errors.client')
-settings_lock = Lock()
-
def get_installed_apps():
"""
@@ -223,28 +221,39 @@ def install_middleware():
"""
name = 'raven.contrib.django.middleware.SentryMiddleware'
all_names = (name, 'raven.contrib.django.middleware.SentryLogMiddleware')
- with settings_lock:
- # default settings.MIDDLEWARE is None
- middleware_attr = 'MIDDLEWARE' if getattr(settings,
- 'MIDDLEWARE',
- None) is not None \
- else 'MIDDLEWARE_CLASSES'
- # make sure to get an empty tuple when attr is None
- middleware = getattr(settings, middleware_attr, ()) or ()
- if set(all_names).isdisjoint(set(middleware)):
- setattr(settings,
- middleware_attr,
- type(middleware)((name,)) + middleware)
+ # default settings.MIDDLEWARE is None
+ middleware_attr = 'MIDDLEWARE' if getattr(settings,
+ 'MIDDLEWARE',
+ None) is not None \
+ else 'MIDDLEWARE_CLASSES'
+ # make sure to get an empty tuple when attr is None
+ middleware = getattr(settings, middleware_attr, ()) or ()
+ if set(all_names).isdisjoint(set(middleware)):
+ setattr(settings,
+ middleware_attr,
+ type(middleware)((name,)) + middleware)
+
+
+_setup_lock = Lock()
+_initialized = False
def initialize():
- register_serializers()
- install_middleware()
+ global _initialized
+
+ with _setup_lock:
+ if _initialized:
+ return
+
+ register_serializers()
+ install_middleware()
+
+ # XXX(dcramer): maybe this setting should disable ALL of this?
+ if not getattr(settings, 'DISABLE_SENTRY_INSTRUMENTATION', False):
+ handler = SentryDjangoHandler()
+ handler.install()
- # XXX(dcramer): maybe this setting should disable ALL of this?
- if not getattr(settings, 'DISABLE_SENTRY_INSTRUMENTATION', False):
- handler = SentryDjangoHandler()
- handler.install()
+ # instantiate client so hooks get registered
+ get_client() # NOQA
- # instantiate client so hooks get registered
- get_client() # NOQA
+ _initialized = True