@@ -614,6 +614,25 @@ function profile_printing_listener(cond::Base.AsyncCondition)
614614    nothing 
615615end 
616616
617+ function  start_profile_listener ()
618+     cond =  Base. AsyncCondition ()
619+     Base. uv_unref (cond. handle)
620+     t =  errormonitor (Threads. @spawn (profile_printing_listener (cond)))
621+     atexit () do 
622+         #  destroy this callback when exiting
623+         ccall (:jl_set_peek_cond , Cvoid, (Ptr{Cvoid},), C_NULL )
624+         #  this will prompt any ongoing or pending event to flush also
625+         close (cond)
626+         #  error-propagation is not needed, since the errormonitor will handle printing that better
627+         _wait (t)
628+     end 
629+     finalizer (cond) do  c
630+         #  if something goes south, still make sure we aren't keeping a reference in C to this
631+         ccall (:jl_set_peek_cond , Cvoid, (Ptr{Cvoid},), C_NULL )
632+     end 
633+     ccall (:jl_set_peek_cond , Cvoid, (Ptr{Cvoid},), cond. handle)
634+ end 
635+ 
617636function  __init__ ()
618637    #  Base library init
619638    global  _atexit_hooks_finished =  false 
@@ -636,22 +655,7 @@ function __init__()
636655    #  Profiling helper
637656    @static  if  ! Sys. iswindows ()
638657        #  triggering a profile via signals is not implemented on windows
639-         cond =  Base. AsyncCondition ()
640-         Base. uv_unref (cond. handle)
641-         t =  errormonitor (Threads. @spawn (profile_printing_listener (cond)))
642-         atexit () do 
643-             #  destroy this callback when exiting
644-             ccall (:jl_set_peek_cond , Cvoid, (Ptr{Cvoid},), C_NULL )
645-             #  this will prompt any ongoing or pending event to flush also
646-             close (cond)
647-             #  error-propagation is not needed, since the errormonitor will handle printing that better
648-             _wait (t)
649-         end 
650-         finalizer (cond) do  c
651-             #  if something goes south, still make sure we aren't keeping a reference in C to this
652-             ccall (:jl_set_peek_cond , Cvoid, (Ptr{Cvoid},), C_NULL )
653-         end 
654-         ccall (:jl_set_peek_cond , Cvoid, (Ptr{Cvoid},), cond. handle)
658+         start_profile_listener ()
655659    end 
656660    _require_world_age[] =  get_world_counter ()
657661    #  Prevent spawned Julia process from getting stuck waiting on Tracy to connect.
0 commit comments