diff --git a/doc/revpimodio2.helper.html b/doc/revpimodio2.helper.html
index c1c26d0..3ece18f 100644
--- a/doc/revpimodio2.helper.html
+++ b/doc/revpimodio2.helper.html
@@ -444,7 +444,7 @@ Methods
Findet Aenderungen fuer die Eventueberwachung. |
| __exec_th |
-Fuehrt Events aus, die als Thread registriert wurden. |
+Laeuft als Thread, der Events als Thread startet. |
| _collect_events |
Aktiviert oder Deaktiviert die Eventueberwachung. |
@@ -501,7 +501,7 @@ Findet Aenderungen fuer die Eventueberwachung.
ProcimgWriter.__exec_th
__exec_th()
-Fuehrt Events aus, die als Thread registriert wurden.
+Laeuft als Thread, der Events als Thread startet.
ProcimgWriter._collect_events
diff --git a/revpimodio2/device.py b/revpimodio2/device.py
index 1ae8e8b..171dccc 100644
--- a/revpimodio2/device.py
+++ b/revpimodio2/device.py
@@ -284,7 +284,10 @@ class Device(object):
self._filelock.release()
self._selfupdate = True
- self._modio._lst_refresh.append(self)
+
+ # Sicher in Liste einfügen
+ with self._modio._imgwriter.lck_refresh:
+ self._modio._lst_refresh.append(self)
# Thread starten, wenn er noch nicht läuft
if not self._modio._imgwriter.is_alive():
diff --git a/revpimodio2/helper.py b/revpimodio2/helper.py
index 592134f..7d6557a 100644
--- a/revpimodio2/helper.py
+++ b/revpimodio2/helper.py
@@ -373,7 +373,7 @@ class ProcimgWriter(Thread):
dev._ba_datacp = dev._ba_devdata[:]
def __exec_th(self):
- """Fuehrt Events aus, die als Thread registriert wurden."""
+ """Laeuft als Thread, der Events als Thread startet."""
while self.__eventwork:
try:
tup_fireth = self.__eventqth.get(timeout=1)
@@ -400,6 +400,7 @@ class ProcimgWriter(Thread):
# Threadmanagement
if value and not self.__eventth.is_alive():
self.__eventth = Thread(target=self.__exec_th)
+ self.__eventth.daemon = True
self.__eventth.start()
def _get_ioerrors(self):
diff --git a/revpimodio2/modio.py b/revpimodio2/modio.py
index 0bdc68f..62bc2c9 100644
--- a/revpimodio2/modio.py
+++ b/revpimodio2/modio.py
@@ -415,12 +415,18 @@ class RevPiModIO(object):
@param full Entfernt auch alle Devices aus autorefresh"""
self._exit.set()
self._waitexit.set()
+
if full:
+ # ProcimgWriter beenden und darauf warten
if self._imgwriter is not None and self._imgwriter.is_alive():
self._imgwriter.stop()
self._imgwriter.join(self._imgwriter._refresh)
+
+ # Mainloop beenden und darauf waretn
if self._th_mainloop is not None and self._th_mainloop.is_alive():
self._th_mainloop.join(1)
+
+ # Alle Devices aus Autorefresh entfernen
while len(self._lst_refresh) > 0:
dev = self._lst_refresh.pop()
dev._selfupdate = False