Skip to content

Commit 1c833cf

Browse files
committed
Fix thread shutdown
- Make sure all Python threads have the daemon=True attribute - Remove thread-reaping from main_window.closeEvent(), now automatic
1 parent c25aa5c commit 1c833cf

File tree

7 files changed

+13
-10
lines changed

7 files changed

+13
-10
lines changed

src/classes/logger_libopenshot.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434

3535

3636
class LoggerLibOpenShot(Thread):
37+
def __init__(self):
38+
super().__init__()
39+
self.daemon = True
3740

3841
def kill(self):
3942
self.running = False
@@ -80,4 +83,4 @@ def run(self):
8083

8184
# Log the message (if any)
8285
if msg:
83-
log.info(msg.strip().decode('UTF-8'))
86+
log.info(msg.strip().decode('UTF-8'))

src/classes/metrics.py

+5
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ def track_metric_screen(screen_name):
9999
metric_params["cid"] = s.get("unique_install_id")
100100

101101
t = threading.Thread(target=send_metric, args=[metric_params])
102+
t.daemon = True
102103
t.start()
103104

104105

@@ -113,6 +114,7 @@ def track_metric_event(event_action, event_label, event_category="General", even
113114
metric_params["cid"] = s.get("unique_install_id")
114115

115116
t = threading.Thread(target=send_metric, args=[metric_params])
117+
t.daemon = True
116118
t.start()
117119

118120

@@ -126,12 +128,14 @@ def track_metric_error(error_name, is_fatal=False):
126128
metric_params["exf"] = 1
127129

128130
t = threading.Thread(target=send_metric, args=[metric_params])
131+
t.daemon = True
129132
t.start()
130133

131134

132135
def track_exception_stacktrace(stacktrace, source):
133136
"""Track an exception/stacktrace has occurred"""
134137
t = threading.Thread(target=send_exception, args=[stacktrace, source])
138+
t.daemon = True
135139
t.start()
136140

137141

@@ -147,6 +151,7 @@ def track_metric_session(is_start=True):
147151
metric_params["cd"] = "close-app"
148152

149153
t = threading.Thread(target=send_metric, args=[metric_params])
154+
t.daemon = True
150155
t.start()
151156

152157

src/classes/thumbnail.py

+2
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,12 @@ def run(self):
106106
# Start listening for HTTP requests (and check for shutdown every 0.5 seconds)
107107
self.server_address = ('127.0.0.1', self.find_free_port())
108108
self.thumbServer = httpThumbnailServer(self.server_address, httpThumbnailHandler)
109+
self.thumbSever.daemon_threads = True
109110
self.thumbServer.serve_forever(0.5)
110111

111112
def __init__(self):
112113
Thread.__init__(self)
114+
self.daemon = True
113115
self.server_address = None
114116

115117

src/classes/version.py

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
def get_current_Version():
3636
"""Get the current version """
3737
t = threading.Thread(target=get_version_from_http)
38+
t.daemon = True
3839
t.start()
3940

4041
def get_version_from_http():

src/classes/waveform.py

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def get_audio_data(clip_id, file_path, channel_filter, volume_keyframe):
4949

5050
log.info("Clip loaded, start thread")
5151
t = threading.Thread(target=get_waveform_thread, args=[clip, clip_id, file_path, channel_filter, volume_keyframe])
52+
t.daemon = True
5253
t.start()
5354

5455
def get_waveform_thread(clip, clip_id, file_path, channel_filter=-1, volume_keyframe=None):

src/windows/animated_title.py

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import time
3232
import uuid
3333
import shutil
34-
import threading
3534
import subprocess
3635
import re
3736
import math

src/windows/main_window.py

-8
Original file line numberDiff line numberDiff line change
@@ -156,18 +156,10 @@ def closeEvent(self, event):
156156
self.preview_parent.background.exit()
157157
self.preview_parent.background.wait(5000)
158158

159-
# Shut down the webview
160-
self.timeline.close()
161-
162159
# Close Timeline
163160
self.timeline_sync.timeline.Close()
164161
self.timeline_sync.timeline = None
165162

166-
# Close & Stop libopenshot logger
167-
openshot.ZmqLogger.Instance().Close()
168-
app.logger_libopenshot.kill()
169-
self.http_server_thread.kill()
170-
171163
# Destroy lock file
172164
self.destroy_lock_file()
173165

0 commit comments

Comments
 (0)