示例#1
0
int
__sigpause (int sig_or_mask, int is_sig)
{
  if (SINGLE_THREAD_P)
    return do_sigpause (sig_or_mask, is_sig);

  int oldtype = LIBC_CANCEL_ASYNC ();

  int result = do_sigpause (sig_or_mask, is_sig);

  LIBC_CANCEL_RESET (oldtype);

  return result;
}
示例#2
0
文件: signal.c 项目: cpc26/abi_linux
int abi_sigsuspend(struct pt_regs * regs)
{
	unsigned long * set;
	unsigned long oldset;
	old_sigset_t newset;
	int error;

	if (personality(PER_BSD)) {
		oldset = get_syscall_parameter (regs, 0);
	} else
	{
		set = (unsigned long *)get_syscall_parameter (regs, 0);
		error = get_user(oldset, set);
		if (error)
			return error;
	}
	newset = map_bitvec(oldset,
		current->exec_domain->signal_map);

#ifdef CONFIG_ABI_TRACE
	if ((ibcs_trace & TRACE_SIGNAL) || ibcs_func_p->trace)
		printk("iBCS: sigsuspend oldset, newset = %lx %lx\n",
			oldset, newset);
#endif
	{
#if 0
	    extern do_sigpause(unsigned int, struct pt_regs *);
	    return do_sigpause(newset, regs);
#endif
	}
	return SYS(sigsuspend)(0, oldset,
			newset, regs->esi, regs->edi,
			regs->ebp, regs->eax,
			regs->xds, regs->xes,
			regs->orig_eax,
			regs->eip, regs->xcs, regs->eflags,
			regs->esp, regs->xss);
}