@@ -56,7 +56,7 @@ static void jl_uv_cb_walk_print(uv_handle_t *h, void *arg)
5656 jl_safe_printf (" %s[%zd] %s@%p->%p\n" , type , (size_t )fd , pad , (void * )h , (void * )h -> data );
5757}
5858
59- static void jl_uv_cb_wait_empty (uv_timer_t * t )
59+ static void jl_uv_cb_wait_empty (uv_timer_t * t ) JL_NOTSAFEPOINT_ENTER
6060{
6161 // make sure this is hidden now, since we would auto-unref it later
6262 uv_unref ((uv_handle_t * )& signal_async );
@@ -69,7 +69,7 @@ static void jl_uv_cb_wait_empty(uv_timer_t *t)
6969 jl_ptls_t ptls = jl_current_task -> ptls ;
7070 int old_state = jl_gc_unsafe_enter (ptls );
7171 jl_gc_collect (JL_GC_FULL );
72- jl_gc_unsafe_leave (ptls ,old_state );
72+ jl_gc_unsafe_leave (ptls , old_state );
7373}
7474
7575void jl_wait_empty_begin (void )
@@ -154,7 +154,7 @@ JL_DLLEXPORT void jl_iolock_end(void)
154154}
155155
156156
157- static void jl_uv_call_hook_close (jl_value_t * val )
157+ static void jl_uv_call_hook_close (jl_value_t * val ) JL_NOTSAFEPOINT_ENTER
158158{
159159 jl_ptls_t ptls = jl_current_task -> ptls ;
160160 int old_state = jl_gc_unsafe_enter (ptls );
@@ -166,7 +166,7 @@ static void jl_uv_call_hook_close(jl_value_t *val)
166166 assert (args [0 ]);
167167 jl_apply (args , 2 ); // TODO: wrap in try-catch?
168168 JL_GC_POP ();
169- jl_gc_unsafe_leave (ptls ,old_state );
169+ jl_gc_unsafe_leave (ptls , old_state );
170170}
171171
172172static void jl_uv_cb_close_handle (uv_handle_t * handle )
@@ -282,7 +282,10 @@ JL_DLLEXPORT void *jl_uv_handle_data(uv_handle_t *handle) { return handle->data;
282282JL_DLLEXPORT void * jl_uv_write_handle (uv_write_t * req ) { return req -> handle ; }
283283
284284
285- int jl_process_events_locked (void ) {
285+ // This is JL_NOTSAFEPOINT, but the analyzer complains about uv_run.
286+ // Callabacks need to handle their GC transitions themselves.
287+ int jl_process_events_locked (void ) // JL_NOTSAFEPOINT
288+ {
286289 uv_loop_t * loop = jl_io_loop ;
287290 loop -> stop_flag = 0 ;
288291 uv_ref ((uv_handle_t * )& signal_async ); // force the loop alive
0 commit comments