for (ss = _hurd_sigstates; ss != NULL; ss = ss->next)
for (ss = _hurd_sigstates; ss != NULL; ss = ss->next, ++nthreads)
abort_all_rpcs (int signo, struct machine_thread_all_state *state, int live){  /* We can just loop over the sigstates.  Any thread doing something     interruptible must have one.  We needn't bother locking because all     other threads are stopped.  */  struct hurd_sigstate *ss;  size_t nthreads;  mach_port_t *reply_ports;  /* First loop over the sigstates to count them.     We need to know how big a vector we will need for REPLY_PORTS.  */  nthreads = 0;  for (ss = _hurd_sigstates; ss != NULL; ss = ss->next)    ++nthreads;  reply_ports = alloca (nthreads * sizeof *reply_ports);  nthreads = 0;  for (ss = _hurd_sigstates; ss != NULL; ss = ss->next)    if (ss->thread == _hurd_msgport_thread)      reply_ports[nthreads++] = MACH_PORT_NULL;    else      {	int state_changed;	state->set = 0;		/* Reset scratch area.  */	/* Abort any operation in progress with interrupt_operation.	   Record the reply port the thread is waiting on.	   We will wait for all the replies below.  */	reply_ports[nthreads++] = _hurdsig_abort_rpcs (ss, signo, 1,						       state, &state_changed,						       NULL);	if (state_changed && live)	  /* Aborting the RPC needed to change this thread's state,	     and it might ever run again.  So write back its state.  */	  __thread_set_state (ss->thread, MACHINE_THREAD_STATE_FLAVOR,			      (natural_t *) &state->basic,			      MACHINE_THREAD_STATE_COUNT);      }  /* Wait for replies from all the successfully interrupted RPCs.  */  while (nthreads-- > 0)    if (reply_ports[nthreads] != MACH_PORT_NULL)      {	error_t err;	mach_msg_header_t head;	err = __mach_msg (&head, MACH_RCV_MSG|MACH_RCV_TIMEOUT, 0, sizeof head,			  reply_ports[nthreads],			  _hurd_interrupted_rpc_timeout, MACH_PORT_NULL);	switch (err)	  {	  case MACH_RCV_TIMED_OUT:	  case MACH_RCV_TOO_LARGE:	    break;	  default:	    assert_perror (err);	  }      }}