fix deadlock when reconnecting client

Change-Id: I07aec4a5723fed08eb752d534a9e39716959c6dc
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/23034
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
zolliker 2020-05-01 15:22:42 +02:00
parent 4448cef24a
commit 84b7b08c43

View File

@ -25,7 +25,7 @@
import time
import queue
import json
from threading import Event, RLock
from threading import Event, RLock, current_thread
from collections import defaultdict
from secop.lib import mkthread, formatExtendedTraceback, formatExtendedStack
@ -375,6 +375,8 @@ class SecopClient(ProxyClient):
txt = str(e).split('\n', 1)[0]
if txt != self._last_error:
self._last_error = txt
if 'join' in str(e):
raise
self.log.error(str(e))
if time.time() > self.disconnect_time + self.reconnect_timeout:
if self.online: # was recently connected
@ -393,7 +395,10 @@ class SecopClient(ProxyClient):
if shutdown:
self._shutdown = True
self._set_state(False, 'shutdown')
if self._connthread: # wait for connection thread stopped
if self._connthread:
if self._connthread == current_thread():
return
# wait for connection thread stopped
self._connthread.join()
self._connthread = None
self.disconnect_time = time.time()