From d41a6b1d3591eb4c366f1543aab9bed866599aa6 Mon Sep 17 00:00:00 2001 From: Eugene Nikanorov Date: Sat, 16 Mar 2013 17:53:39 +0400 Subject: [PATCH] Synchronize QuantumManager.get_instance() method fixes bug 1155667 Change-Id: Ib6316b332fbd08c5b39e9820e5dc45f1846817cd --- quantum/manager.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/quantum/manager.py b/quantum/manager.py index 74057dc5f..c7cc8a13e 100644 --- a/quantum/manager.py +++ b/quantum/manager.py @@ -20,6 +20,7 @@ from oslo.config import cfg from quantum.common.exceptions import ClassNotFound from quantum.openstack.common import importutils +from quantum.openstack.common import lockutils from quantum.openstack.common import log as logging from quantum.openstack.common import periodic_task from quantum.plugins.common import constants @@ -131,9 +132,16 @@ class QuantumManager(object): "desc": plugin_inst.get_plugin_description()}) @classmethod - def get_instance(cls): + @lockutils.synchronized("qmlock", "qml-") + def _create_instance(cls): if cls._instance is None: cls._instance = cls() + + @classmethod + def get_instance(cls): + # double checked locking + if cls._instance is None: + cls._create_instance() return cls._instance @classmethod