diff --git a/ipaacalib/python/src/ipaaca/__init__.py b/ipaacalib/python/src/ipaaca/__init__.py index 09321c0bd26070239ee9a44f354e62d5f40eeaff..998fe65f7e0237293b8ef54e621c98165372b02f 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 ff6bacf83fb70e33bae358bfd1481b8c621b9064..6a408341f7991acf8bc19749def7a92648b39ef2 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