Lock create_renderer_kwargs separately from configs

This commit is contained in:
ZyX 2013-04-03 07:38:53 +04:00
parent 33d32498b9
commit 2a0e601995

View File

@ -160,6 +160,7 @@ class Powerline(object):
self.config_paths = self.get_config_paths() self.config_paths = self.get_config_paths()
self.configs_lock = Lock() self.configs_lock = Lock()
self.cr_kwargs_lock = Lock()
self.create_renderer_kwargs = {} self.create_renderer_kwargs = {}
self.shutdown_event = Event() self.shutdown_event = Event()
self.configs = defaultdict(set) self.configs = defaultdict(set)
@ -396,14 +397,13 @@ class Powerline(object):
'''Lock renderer from modifications and pass all arguments further to '''Lock renderer from modifications and pass all arguments further to
``self.renderer.render()``. ``self.renderer.render()``.
''' '''
if self.create_renderer_kwargs: with self.cr_kwargs_lock:
try: if self.create_renderer_kwargs:
with self.configs_lock: try:
cr_kwargs = self.create_renderer_kwargs.copy() cr_kwargs = self.create_renderer(**self.create_renderer_kwargs)
self.create_renderer_kwargs.clear() self.create_renderer_kwargs.clear()
self.create_renderer(**cr_kwargs) except Exception as e:
except Exception as e: self.pl.exception('Failed to create renderer: {0}', str(e))
self.pl.exception('Failed to create renderer: {0}', str(e))
return self.renderer.render(*args, **kwargs) return self.renderer.render(*args, **kwargs)
def shutdown(self): def shutdown(self):
@ -440,6 +440,7 @@ class Powerline(object):
pass pass
else: else:
kwargs['load_' + type] = True kwargs['load_' + type] = True
with self.cr_kwargs_lock:
if kwargs: if kwargs:
self.create_renderer_kwargs.update(kwargs) self.create_renderer_kwargs.update(kwargs)
self.shutdown_event.wait(self.interval) self.shutdown_event.wait(self.interval)