@@ -450,50 +450,65 @@ def start
450450 end
451451 end
452452
453- Steep . logger . tagged "main" do
454- while job = job_queue . deq
455- case job
456- when ReceiveMessageJob
457- src = case job . source
453+ loop_thread = Thread . new do
454+ Steep . logger . formatter . push_tags ( *tags )
455+ Steep . logger . tagged "main" do
456+ while job = job_queue . deq
457+ case job
458+ when ReceiveMessageJob
459+ src = case job . source
460+ when :client
461+ :client
462+ else
463+ job . source . name
464+ end
465+ Steep . logger . tagged ( "ReceiveMessageJob(#{ src } /#{ job . message [ :method ] } /#{ job . message [ :id ] } )" ) do
466+ if job . response? && result_controller . process_response ( job . message )
467+ # nop
468+ Steep . logger . info { "Processed by ResultController" }
469+ else
470+ case job . source
458471 when :client
459- :client
460- else
461- job . source . name
462- end
463- Steep . logger . tagged ( "ReceiveMessageJob(#{ src } /#{ job . message [ :method ] } /#{ job . message [ :id ] } )" ) do
464- if job . response? && result_controller . process_response ( job . message )
465- # nop
466- Steep . logger . info { "Processed by ResultController" }
467- else
468- case job . source
469- when :client
470- process_message_from_client ( job . message )
471-
472- if job . message [ :method ] == "exit"
473- job_queue . close ( )
472+ process_message_from_client ( job . message )
473+
474+ if job . message [ :method ] == "exit"
475+ job_queue . close ( )
476+ end
477+ when WorkerProcess
478+ process_message_from_worker ( job . message , worker : job . source )
474479 end
475- when WorkerProcess
476- process_message_from_worker ( job . message , worker : job . source )
477480 end
478481 end
479- end
480- when SendMessageJob
481- case job . dest
482- when : client
483- Steep . logger . info { "Processing SendMessageJob: dest=client, method= #{ job . message [ :method ] || "-" } , id= #{ job . message [ :id ] || "-" } " }
484- writer . write job . message
485- when WorkerProcess
486- Steep . logger . info { "Processing SendMessageJob: dest= #{ job . dest . name } , method= #{ job . message [ :method ] || "-" } , id= #{ job . message [ :id ] || "-" } " }
487- job . dest << job . message
482+ when SendMessageJob
483+ case job . dest
484+ when :client
485+ Steep . logger . info { "Processing SendMessageJob: dest= client, method= #{ job . message [ :method ] || "-" } , id= #{ job . message [ :id ] || "-" } " }
486+ writer . write job . message
487+ when WorkerProcess
488+ Steep . logger . info { "Processing SendMessageJob: dest= #{ job . dest . name } , method= #{ job . message [ :method ] || "-" } , id= #{ job . message [ :id ] || "-" } " }
489+ job . dest << job . message
490+ end
488491 end
489492 end
490493 end
494+ end
495+
496+ waiter = ThreadWaiter . new ( each_worker . to_a ) { |worker | worker . wait_thread }
497+ waiter . wait_one ( )
491498
492- read_client_thread . join ( )
493- worker_threads . each do |thread |
494- thread . join
499+ unless job_queue . closed?
500+ # Exit by error
501+ each_worker do |worker |
502+ worker . kill ( force : true )
495503 end
504+ raise "Unexpected worker process exit"
505+ end
506+
507+ read_client_thread . join ( )
508+ worker_threads . each do |thread |
509+ thread . join
496510 end
511+ loop_thread . join
497512 end
498513 end
499514
0 commit comments