Skip to content

Commit db9d0a2

Browse files
committed
fix: 避免旧任务清理覆盖新 trace 任务
1 parent fabb0c2 commit db9d0a2

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

app.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,16 @@ def check_timeouts():
4444
time.sleep(1)
4545

4646

47-
def cleanup_client_state(sid):
48-
task_removed = clients.pop(sid, None)
49-
if task_removed:
47+
def cleanup_client_state(sid, task=None):
48+
current_task = clients.get(sid)
49+
same_task = task is None or current_task is task
50+
if same_task and current_task is not None:
51+
clients.pop(sid, None)
5052
logging.info(f"Client {sid} removed from clients dictionary")
51-
if client_last_active.pop(sid, None) is not None:
53+
elif not same_task:
54+
logging.debug(f"Skip cleanup for client {sid}: task mismatch")
55+
56+
if same_task and client_last_active.pop(sid, None) is not None:
5257
logging.debug(f"Client {sid} removed from last active tracker")
5358

5459

@@ -135,7 +140,7 @@ def emit_complete(self):
135140
if not self._complete_emitted:
136141
self._complete_emitted = True
137142
self.socketio.emit('nexttrace_complete', room=self.sid)
138-
cleanup_client_state(self.sid)
143+
cleanup_client_state(self.sid, task=self)
139144

140145
def emit_error_row(self, message):
141146
error_payload = json.dumps(['-1', '', '', '0', 'ERROR', '', message], ensure_ascii=False)
@@ -235,6 +240,10 @@ def start_nexttrace(data):
235240

236241
# 确保数据是一个字典且包含 'ip' 键
237242
if isinstance(data, dict) and 'ip' in data:
243+
existing_task = clients.get(request.sid)
244+
if existing_task:
245+
logging.info(f"Client {request.sid} requested new trace, stopping existing task first")
246+
stop_nexttrace_for_sid(request.sid)
238247
logging.info(f"Client {request.sid} start nexttrace, params: {data}")
239248
params = data['ip']
240249
if params:

0 commit comments

Comments
 (0)