Skip to content

Commit

Permalink
gui/applets: prevent concurrent process start/stop
Browse files Browse the repository at this point in the history
sbourdeauducq committed Feb 11, 2016
1 parent 92c0ede commit 29d4755
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions artiq/gui/applets.py
Original file line number Diff line number Diff line change
@@ -95,11 +95,17 @@ def __init__(self, datasets_sub, uid, name, command):
self.applet_name = name
self.command = command

self.starting_stopping = False

def rename(self, name):
self.applet_name = name
self.label.setText("Applet: " + name)

async def start(self):
if self.starting_stopping:
return
self.starting_stopping = True

self.ipc = AppletIPCServer(self.datasets_sub)
if "{ipc_address}" not in self.command:
logger.warning("IPC address missing from command for %s",
@@ -114,6 +120,8 @@ async def start(self):
exc_info=True)
self.ipc.start(self.embed, self.fix_initial_size)

self.starting_stopping = False

def embed(self, win_id):
logger.debug("capturing window 0x%x for %s", win_id, self.applet_name)
self.embed_window = QtGui.QWindow.fromWinId(win_id)
@@ -127,6 +135,10 @@ def fix_initial_size(self):
self.embed_window.resize(self.embed_widget.size())

async def terminate(self):
if self.starting_stopping:
return
self.starting_stopping = True

if hasattr(self, "ipc"):
await self.ipc.stop()
self.ipc.write_pyon({"action": "terminate"})
@@ -142,9 +154,12 @@ async def terminate(self):
await self.ipc.process.wait()
del self.ipc

if hasattr(self, "embed_widget"):
self.embed_widget.deleteLater()
del self.embed_widget

self.starting_stopping = False

async def restart(self):
await self.terminate()
await self.start()

0 comments on commit 29d4755

Please sign in to comment.