@@ -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