forked from M-Labs/artiq
concurrent access to interactive args throws error
This commit is contained in:
parent
329e7189cc
commit
dae0586cc8
|
@ -2,6 +2,7 @@ from collections import OrderedDict
|
||||||
from inspect import isclass
|
from inspect import isclass
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
import threading
|
||||||
|
|
||||||
from sipyco import pyon
|
from sipyco import pyon
|
||||||
|
|
||||||
|
@ -262,6 +263,7 @@ class HasEnvironment:
|
||||||
self.__in_build = True
|
self.__in_build = True
|
||||||
self.build(*args, **kwargs)
|
self.build(*args, **kwargs)
|
||||||
self.__in_build = False
|
self.__in_build = False
|
||||||
|
self.__interactive_semaphore = threading.Semaphore()
|
||||||
|
|
||||||
def register_child(self, child):
|
def register_child(self, child):
|
||||||
self.children.append(child)
|
self.children.append(child)
|
||||||
|
@ -349,7 +351,10 @@ class HasEnvironment:
|
||||||
namespace.setattr_argument = setattr_argument
|
namespace.setattr_argument = setattr_argument
|
||||||
yield namespace
|
yield namespace
|
||||||
del namespace.setattr_argument
|
del namespace.setattr_argument
|
||||||
|
if not self.__interactive_semaphore.acquire(blocking=False):
|
||||||
|
raise RuntimeError("concurrent calls to interactive with the same RID is not supported")
|
||||||
argdict = self.__argument_mgr.get_interactive(interactive_arglist, title)
|
argdict = self.__argument_mgr.get_interactive(interactive_arglist, title)
|
||||||
|
self.__interactive_semaphore.release()
|
||||||
for key, value in argdict.items():
|
for key, value in argdict.items():
|
||||||
setattr(namespace, key, value)
|
setattr(namespace, key, value)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue