kernel-packages team mailing list archive
-
kernel-packages team
-
Mailing list archive
-
Message #93086
[Bug 319729] Re: ARM architecture lacks support for pselect() and ppoll()
karmic has seen the end of its life and is no longer receiving any
updates. Marking the karmic task for this ticket as "Won't Fix".
** Changed in: linux-mvl-dove (Ubuntu Karmic)
Status: Triaged => Won't Fix
--
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/319729
Title:
ARM architecture lacks support for pselect() and ppoll()
Status in Release Notes for Ubuntu:
Fix Released
Status in linux package in Ubuntu:
Invalid
Status in linux-fsl-imx51 package in Ubuntu:
Fix Released
Status in linux-mvl-dove package in Ubuntu:
Won't Fix
Status in linux source package in Jaunty:
Won't Fix
Status in linux-fsl-imx51 source package in Jaunty:
Won't Fix
Status in linux-mvl-dove source package in Jaunty:
Invalid
Status in linux source package in Karmic:
Invalid
Status in linux-fsl-imx51 source package in Karmic:
Won't Fix
Status in linux-mvl-dove source package in Karmic:
Won't Fix
Bug description:
The ARM architecture in the upstream kernel lacks support for the
pselect() and ppoll() system calls.
pselect is defined in POSIX.1g, and in POSIX.1-2001, while ppoll is
Linux specific but matches the intent of pselect.
The difference between select() and pselect() & poll() and ppoll() is
that the latter system calls accept an additional sigmask parameter.
Effectively they are equivalent to:
sigprocmask (SIG_SETMASK, &mask, &oldmask);
select (...);
sigprocmask (SIG_SETMASK, &oldmask, NULL);
*EXCEPT* that this is performed atomically!
When these syscalls do not exist, glibc emulates them with the above
code - which defeats the entire object of their existance.
Consider when the mask is empty, and the normal process mark blocks
SIGCHLD. With pselect()/ppoll() you are guaranteed to only have the
SIGCHLD delivered while in the syscall, and thus guaranteed that any
child death will terminate the syscall with -EINTR.
With the non-atomic code, the SIGCHLD signal may be delivered between
the sigprocmask() and select() system calls, in which case the select
will NOT terminate. Software will randomly hang in select and not
reap its children.
In some cases, the software may be self-imposing a limit on the number
of its children. If the children die at the wrong point, the daemon
may hang indefinitely - since it will not process the death.
One such process that uses ppoll() and limits its children is udev!
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-release-notes/+bug/319729/+subscriptions