in gtthread_sched.c , function gtthread_create, line 190
the code sigprocmask(SIG_UNBLOCK, &sigmaskset, NULL);
is unreachable and the function will always return before it.
fix: move the unblock code into the end of the preceeding if statement, AND the else statement.
This is one of the joys of having mid function return statements :-)
otherwise, I enjoyed reading your code very much. It helped a lot. Go Federer !