On 05/09/05 18:47, Daniel Eischen wrote:
On Mon, 9 May 2005, Daniel Eischen wrote:
On Mon, 9 May 2005, Suleiman Souhlal wrote:
I think I've found the problem: Python uses setjmp/longjmp to protect
against SIGFPU every time it does floating point operations. The
python script does not actually use threads, and libpthread assumes
non-threaded processes are system scope. So, it would end up using
the sigprocmask syscall, even though it doesn't really need to.
The diff at http://people.freebsd.org/~ssouhlal/testing/
thr_sigmask-20050509.diff fixes this, by making sure the process is
threaded, before using the syscall.

[ ... ]

If the process wasn't linked to libpthread, then the longjmp()
and setjmp() would still be calling the syscall, so it isn't
the syscall itself that is making things slower.  You'll notice
that there are two calls to __sys_sigprocmask() in the section
of code you have patched.  You could eliminate the second call
if you do some of what the remainder of the function does instead
of returning early (the locks aren't needed and pending signals
don't need to be run down).

As in something like this:

  http://people.freebsd.org/~deischen/kse/thr_sigmask.c.diffs

It has not been tested.

When I tried to test this every threaded program died with sig 11. Does this require me to recompile the program before it will work?

--
Jonathan Noack | [EMAIL PROTECTED] | OpenPGP: 0x991D8195

Attachment: signature.asc
Description: OpenPGP digital signature



Reply via email to