static void* finalization_thread_proc (void *unused) { while (1) { struct finalization_pipe_data data; scm_without_guile (read_finalization_pipe_data, &data); if (data.n <= 0 && data.err != EINTR) { perror ("error in finalization thread"); return NULL; } switch (data.byte) { case 0: scm_run_finalizers (); break; case 1: return NULL; default: abort (); } } }
static void * gdbscm_with_catch (void *data) { struct with_catch_data *d = data; d->catch_result = scm_c_catch (SCM_BOOL_T, d->func, d->data, d->unwind_handler, d, d->pre_unwind_handler, d); #if HAVE_GUILE_MANUAL_FINALIZATION scm_run_finalizers (); #endif return NULL; }
static SCM run_finalizers_async_thunk (void) { scm_run_finalizers (); return SCM_UNSPECIFIED; }