From 7892eed092fc33caaf0e57236a75d341f3d8f441 Mon Sep 17 00:00:00 2001 From: Hendrik Buschmeier <hbuschme@uni-bielefeld.de> Date: Thu, 7 Jan 2016 12:16:36 +0100 Subject: [PATCH] ipaaca-python: Moved rsb initialisation from module to Buffer. --- ipaacalib/python/src/ipaaca/__init__.py | 90 ++++++++++++++----------- ipaacalib/python/src/ipaaca/buffer.py | 1 + 2 files changed, 51 insertions(+), 40 deletions(-) diff --git a/ipaacalib/python/src/ipaaca/__init__.py b/ipaacalib/python/src/ipaaca/__init__.py index 09321c0..998fe65 100755 --- a/ipaacalib/python/src/ipaaca/__init__.py +++ b/ipaacalib/python/src/ipaaca/__init__.py @@ -32,6 +32,8 @@ from __future__ import division, print_function +import threading + import rsb import rsb.converter @@ -44,46 +46,54 @@ from ipaaca.misc import enable_logging, IpaacaArgumentParser from ipaaca.payload import Payload -def initialize_ipaaca_rsb(): - ''''Register own RSB Converters and initialise RSB from default config file.''' - rsb.converter.registerGlobalConverter( - ipaaca.converter.IntConverter( - wireSchema="int32", - dataType=int)) - - rsb.converter.registerGlobalConverter( - ipaaca.converter.IUConverter( - wireSchema="ipaaca-iu", - dataType=IU)) - - rsb.converter.registerGlobalConverter( - ipaaca.converter.MessageConverter( - wireSchema="ipaaca-messageiu", - dataType=Message)) - - rsb.converter.registerGlobalConverter( - ipaaca.converter.IULinkUpdateConverter( - wireSchema="ipaaca-iu-link-update", - dataType=converter.IULinkUpdate)) - - rsb.converter.registerGlobalConverter( - ipaaca.converter.IUPayloadUpdateConverter( - wireSchema="ipaaca-iu-payload-update", - dataType=converter.IUPayloadUpdate)) - - rsb.converter.registerGlobalConverter( - rsb.converter.ProtocolBufferConverter( - messageClass=ipaaca_pb2.IUCommission)) - - rsb.converter.registerGlobalConverter( - rsb.converter.ProtocolBufferConverter( - messageClass=ipaaca_pb2.IUResendRequest)) +__RSB_INITIALIZER_LOCK = threading.Lock() +__RSB_INITIALIZED = False - rsb.converter.registerGlobalConverter( - rsb.converter.ProtocolBufferConverter( - messageClass=ipaaca_pb2.IURetraction)) - rsb.__defaultParticipantConfig = rsb.ParticipantConfig.fromDefaultSources() +def initialize_ipaaca_rsb_if_needed(): + '''Register own RSB Converters and initialise RSB from default config file.''' + global __RSB_INITIALIZED + with __RSB_INITIALIZER_LOCK: + if __RSB_INITIALIZED: + return + else: + rsb.converter.registerGlobalConverter( + ipaaca.converter.IntConverter( + wireSchema="int32", + dataType=int)) + + rsb.converter.registerGlobalConverter( + ipaaca.converter.IUConverter( + wireSchema="ipaaca-iu", + dataType=IU)) + + rsb.converter.registerGlobalConverter( + ipaaca.converter.MessageConverter( + wireSchema="ipaaca-messageiu", + dataType=Message)) + + rsb.converter.registerGlobalConverter( + ipaaca.converter.IULinkUpdateConverter( + wireSchema="ipaaca-iu-link-update", + dataType=converter.IULinkUpdate)) + + rsb.converter.registerGlobalConverter( + ipaaca.converter.IUPayloadUpdateConverter( + wireSchema="ipaaca-iu-payload-update", + dataType=converter.IUPayloadUpdate)) + + rsb.converter.registerGlobalConverter( + rsb.converter.ProtocolBufferConverter( + messageClass=ipaaca_pb2.IUCommission)) + + rsb.converter.registerGlobalConverter( + rsb.converter.ProtocolBufferConverter( + messageClass=ipaaca_pb2.IUResendRequest)) + + rsb.converter.registerGlobalConverter( + rsb.converter.ProtocolBufferConverter( + messageClass=ipaaca_pb2.IURetraction)) + + rsb.__defaultParticipantConfig = rsb.ParticipantConfig.fromDefaultSources() -# Initialise module -initialize_ipaaca_rsb() + __RSB_INITIALIZED = True diff --git a/ipaacalib/python/src/ipaaca/buffer.py b/ipaacalib/python/src/ipaaca/buffer.py index ff6bacf..6a40834 100644 --- a/ipaacalib/python/src/ipaaca/buffer.py +++ b/ipaacalib/python/src/ipaaca/buffer.py @@ -157,6 +157,7 @@ class Buffer(object): participant_config -- RSB configuration ''' super(Buffer, self).__init__() + ipaaca.initialize_ipaaca_rsb_if_needed() self._owning_component_name = owning_component_name self._channel = channel if channel is not None else ipaaca.defaults.IPAACA_DEFAULT_CHANNEL self._participant_config = rsb.ParticipantConfig.fromDefaultSources() if participant_config is None else participant_config -- GitLab