pthread_mutex_t gp_gc_lock = PTHREAD_MUTEX_INITIALIZER;
void gp_no_gc()
{
printf("lock\n");
pthread_mutex_lock(&gp_gc_lock);
gp_gc_p ++;
pthread_mutex_unlock(&gp_gc_lock);
printf("unlock\n");
}
void gp_do_gc()
{
printf("lock\n");
pthread_mutex_lock(&gp_gc_lock);
gp_gc_p --;
pthread_mutex_unlock(&gp_gc_lock);
printf("unlock\n");
}
void *gp_after_mark_hook(void *hook_data, void *fn_data, void *data)
{
SCM pt = scm_fluid_ref(gp_stacks);
printf("lock\n");
pthread_mutex_lock(&gp_gc_lock);
if(gp_gc_p)
{
pthread_mutex_unlock(&gp_gc_lock);
printf("unlock\n");
return (void *)0;
}
pthread_mutex_unlock(&gp_gc_lock);
printf("unlock\n");
...
But replacing the pthread versions with guile versions of the mutex result in the mutex getting into a locked state without leaving. I sthis a known issue?