Skip to content

Commit 089c49e

Browse files
authored
Merge pull request #648 from peterbarker/stop-threads
MAVConnection: stop threads on exit and connection close
2 parents 51e9fe9 + 0b177a8 commit 089c49e

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

dronekit/mavlink.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,15 @@ def recv_msg(self):
112112

113113

114114
class MAVConnection(object):
115+
116+
def stop_threads(self):
117+
if self.mavlink_thread_in is not None:
118+
self.mavlink_thread_in.join()
119+
self.mavlink_thread_in = None
120+
if self.mavlink_thread_out is not None:
121+
self.mavlink_thread_out.join()
122+
self.mavlink_thread_out = None
123+
115124
def __init__(self, ip, baud=115200, target_system=0, source_system=255, use_native=False):
116125
if ip.startswith("udpin:"):
117126
self.master = mavudpin_multi(ip[6:], input=True, baud=baud, source_system=source_system)
@@ -151,6 +160,7 @@ def newsendfn(mavmsg, **kwargs):
151160

152161
def onexit():
153162
self._alive = False
163+
self.stop_threads()
154164

155165
atexit.register(onexit)
156166

@@ -192,7 +202,7 @@ def mavlink_thread_out():
192202
def mavlink_thread_in():
193203
# Huge try catch in case we see http://bugs.python.org/issue1856
194204
try:
195-
while True:
205+
while self._alive:
196206
# Downtime
197207
time.sleep(0.05)
198208

@@ -289,6 +299,7 @@ def close(self):
289299
self._alive = False
290300
while not self.out_queue.empty():
291301
time.sleep(0.1)
302+
self.stop_threads()
292303
self.master.close()
293304

294305
def pipe(self, target):

0 commit comments

Comments
 (0)