else if (thread == _hurd_itimer_thread) strcpy (description, "itimer");
_S_msg_report_wait (mach_port_t msgport, thread_t thread,		    string_t description, int *msgid){  *msgid = 0;  if (thread == _hurd_msgport_thread)    /* Cute.  */    strcpy (description, "msgport");  else    {      /* Make sure this is really one of our threads.  */      struct hurd_sigstate *ss;      __mutex_lock (&_hurd_siglock);      for (ss = _hurd_sigstates; ss != NULL; ss = ss->next)	if (ss->thread == thread)	  break;      __mutex_unlock (&_hurd_siglock);      if (ss == NULL)	/* To hell with you.  */	return EINVAL;      if (ss->suspended != MACH_PORT_NULL)	strcpy (description, "sigsuspend");      else	{	  /* Examine the thread's state to see if it is blocked in an RPC.  */	  struct machine_thread_state state;	  mach_msg_type_number_t count = MACHINE_THREAD_STATE_COUNT;	  error_t err;	  err = __thread_get_state (thread, MACHINE_THREAD_STATE_FLAVOR,				    (integer_t *) &state, &count);	  if (err)	    return err;	  assert (count == MACHINE_THREAD_STATE_COUNT);	  if (SYSCALL_EXAMINE (&state, msgid))	    {	      /* Blocked in a system call.  */	      if (*msgid == -25)		/* mach_msg system call.  Examine its parameters.  */		describe_port (description, MSG_EXAMINE (&state, msgid));	      else		strcpy (description, "kernel");	    }	  else	    description[0] = '\0';	}    }  __mach_port_deallocate (__mach_task_self (), thread);  return 0;}