Implement rt_sigpending in the linuxolator.

PR:		92671
Submitted by:	Markus Niemist"o <markus.niemisto@gmx.net>
This commit is contained in:
Alexander Leidinger 2006-05-10 18:17:29 +00:00
parent f488d07edb
commit 17138b619c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=158406
5 changed files with 32 additions and 4 deletions

View File

@ -54,7 +54,6 @@ DUMMY(sysfs);
DUMMY(query_module);
DUMMY(nfsservctl);
DUMMY(prctl);
DUMMY(rt_sigpending);
DUMMY(rt_sigtimedwait);
DUMMY(rt_sigqueueinfo);
DUMMY(capget);

View File

@ -308,7 +308,8 @@
175 AUE_NULL MSTD { int linux_rt_sigprocmask(l_int how, \
l_sigset_t *mask, l_sigset_t *omask, \
l_size_t sigsetsize); }
176 AUE_NULL MSTD { int linux_rt_sigpending(void); }
176 AUE_NULL MSTD { int linux_rt_sigpending(l_sigset_t *set, \
l_size_t sigsetsize); }
177 AUE_NULL MSTD { int linux_rt_sigtimedwait(void); }
178 AUE_NULL MSTD { int linux_rt_sigqueueinfo(void); }
179 AUE_NULL MSTD { int linux_rt_sigsuspend( \

View File

@ -406,6 +406,34 @@ linux_sigpending(struct thread *td, struct linux_sigpending_args *args)
mask = lset.__bits[0];
return (copyout(&mask, args->mask, sizeof(mask)));
}
/*
* MPSAFE
*/
int
linux_rt_sigpending(struct thread *td, struct linux_rt_sigpending_args *args)
{
struct proc *p = td->td_proc;
sigset_t bset;
l_sigset_t lset;
if (args->sigsetsize > sizeof(lset))
return EINVAL;
/* NOT REACHED */
#ifdef DEBUG
if (ldebug(rt_sigpending))
printf(ARGS(rt_sigpending, "*"));
#endif
PROC_LOCK(p);
bset = p->p_siglist;
SIGSETOR(bset, td->td_siglist);
SIGSETAND(bset, td->td_sigmask);
PROC_UNLOCK(p);
bsd_to_linux_sigset(&bset, &lset);
return (copyout(&lset, args->set, args->sigsetsize));
}
#endif /*!__alpha__*/
int

View File

@ -57,7 +57,6 @@ DUMMY(vm86);
DUMMY(query_module);
DUMMY(nfsservctl);
DUMMY(prctl);
DUMMY(rt_sigpending);
DUMMY(rt_sigtimedwait);
DUMMY(rt_sigqueueinfo);
DUMMY(capget);

View File

@ -312,7 +312,8 @@
175 AUE_NULL MSTD { int linux_rt_sigprocmask(l_int how, \
l_sigset_t *mask, l_sigset_t *omask, \
l_size_t sigsetsize); }
176 AUE_NULL MSTD { int linux_rt_sigpending(void); }
176 AUE_NULL MSTD { int linux_rt_sigpending(l_sigset_t *set, \
l_size_t sigsetsize); }
177 AUE_NULL MSTD { int linux_rt_sigtimedwait(void); }
178 AUE_NULL MSTD { int linux_rt_sigqueueinfo(void); }
179 AUE_NULL MSTD { int linux_rt_sigsuspend( \