if (__pthread_threads_debug) { request.req_thread = self; request.req_kind = REQ_DEBUG; __libc_write(__pthread_manager_request, (char *) &request, sizeof(request)); suspend(self); }
static int pthread_start_thread(void *arg){  pthread_descr self = (pthread_descr) arg;  void * outcome;  /* Initialize special thread_self processing, if any.  */#ifdef INIT_THREAD_SELF  INIT_THREAD_SELF(self);#endif  /* Make sure our pid field is initialized, just in case we get there     before our father has initialized it. */  self->p_pid = __getpid();  /* Initial signal mask is that of the creating thread. (Otherwise,     we'd just inherit the mask of the thread manager.) */  sigprocmask(SIG_SETMASK, &self->p_start_args.mask, NULL);  /* Set the scheduling policy and priority for the new thread, if needed */  if (self->p_start_args.schedpolicy >= 0)    __sched_setscheduler(self->p_pid, self->p_start_args.schedpolicy,                         &self->p_start_args.schedparam);  /* Run the thread code */  outcome = self->p_start_args.start_routine(self->p_start_args.arg);  /* Exit with the given return value */  pthread_exit(outcome);  return 0;}