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:
parent
4448cef24a
commit
84b7b08c43
@ -25,7 +25,7 @@
|
|||||||
import time
|
import time
|
||||||
import queue
|
import queue
|
||||||
import json
|
import json
|
||||||
from threading import Event, RLock
|
from threading import Event, RLock, current_thread
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
from secop.lib import mkthread, formatExtendedTraceback, formatExtendedStack
|
from secop.lib import mkthread, formatExtendedTraceback, formatExtendedStack
|
||||||
@ -375,6 +375,8 @@ class SecopClient(ProxyClient):
|
|||||||
txt = str(e).split('\n', 1)[0]
|
txt = str(e).split('\n', 1)[0]
|
||||||
if txt != self._last_error:
|
if txt != self._last_error:
|
||||||
self._last_error = txt
|
self._last_error = txt
|
||||||
|
if 'join' in str(e):
|
||||||
|
raise
|
||||||
self.log.error(str(e))
|
self.log.error(str(e))
|
||||||
if time.time() > self.disconnect_time + self.reconnect_timeout:
|
if time.time() > self.disconnect_time + self.reconnect_timeout:
|
||||||
if self.online: # was recently connected
|
if self.online: # was recently connected
|
||||||
@ -393,7 +395,10 @@ class SecopClient(ProxyClient):
|
|||||||
if shutdown:
|
if shutdown:
|
||||||
self._shutdown = True
|
self._shutdown = True
|
||||||
self._set_state(False, 'shutdown')
|
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.join()
|
||||||
self._connthread = None
|
self._connthread = None
|
||||||
self.disconnect_time = time.time()
|
self.disconnect_time = time.time()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user