#9678: Rewrite interrupt handling
------------------------------+---------------------------------------------
Reporter: jdemeyer | Owner: tba
Type: task | Status: new
Priority: major | Milestone: sage-feature
Component: c_lib | Keywords: interrupt, error, c, cython
Author: Jeroen Demeyer | Upstream: N/A
Reviewer: | Merged:
Work_issues: |
------------------------------+---------------------------------------------
Description changed by jdemeyer:
Old description:
> There are lots of things to be improved in the interrupt handling
> routines in c_lib/src/interrupt.c and c_lib/include/interrupt.h.
>
> Major changes planned:
> * '''DONE''': make {{{sig_on()}}} have function syntax so that we can
> declare it {{{cdef int sig_on() except 0}}}. See #10115 for the syntax
> changes.
> * using {{{setjmp()}}} instead of {{{sigsetjmp()}}}. This is about a
> factor 20 faster on my x86_64 Linux box.
> * '''DONE''': using {{{sigaction()}}} instead of {{{signal()}}} since
> that has more well-defined semantics.
> * '''DONE''': allow {{{sig_on()}}} and {{{sig_off()}}} to be nested.
> * have an interface for more general errors which are not signals.
> * '''DONE''': clean up old, unused code.
> * '''IN PROGRESS''': testing interrupt handling: #10030.
> * '''IN PROGRESS''': fix breakage because of this patch: #10061.
> * '''IN PROGRESS''': documentation: #10109.
> * allow to temporarily suspend interrupts and do this in
> {{{sage_malloc()}}} and friends (an interrupt during {{{malloc()}}} will
> mess up the heap, this happens sometimes with a "fixed" #9564!)
> * eliminate race conditions as much as possible, like a SIGINT arriving
> before {{{sig_on()}}} was called.
>
> Other related tickets:
> * #800 (make _sig_on and _sig_off faster when stacked)
> * #9640 (Change PARI error catching mechanism)
> * #9564 (libsingular exponentiation can not be interrupted)
> * #7879 (Remove unnecessary signal handling for low prec mpfr
> operations) --- hopefully {{{sig_on()}}} and {{{sig_off()}}} can be made
> very fast such that this shouldn't be an issue anymore.
> * #10018 (Unhandled SIGSEGV after bnfcertify())
> * #7794 ({{{PolynomialRing_integral_domain}}} ignores Ctrl-C and
> segfaults)
> * #5313 (patch singular so that when it runs out of memory the error
> message says "singular" in it)
> * #3423 (Make Pari error messages more informative)
>
> Dependency: #10115
New description:
There are lots of things to be improved in the interrupt handling routines
in c_lib/src/interrupt.c and c_lib/include/interrupt.h.
Major changes planned:
* '''DONE''': make {{{sig_on()}}} have function syntax so that we can
declare it {{{cdef int sig_on() except 0}}}. See #10115 for the syntax
changes.
* using {{{setjmp()}}} instead of {{{sigsetjmp()}}}. This speeds up a
sig_on/sig_off loop from 382 clock cycles to 24 clock cycles on a
Core(TM)2 Duo CPU T5870 @ 2.00GHz running Linux 2.6.32 glibc 2.11.2.
* '''DONE''': using {{{sigaction()}}} instead of {{{signal()}}} since
that has more well-defined semantics.
* '''DONE''': allow {{{sig_on()}}} and {{{sig_off()}}} to be nested.
* have an interface for more general errors which are not signals.
* '''DONE''': clean up old, unused code.
* '''IN PROGRESS''': testing interrupt handling: #10030.
* '''IN PROGRESS''': fix breakage because of this patch: #10061.
* '''IN PROGRESS''': documentation: #10109.
* allow to temporarily suspend interrupts and do this in
{{{sage_malloc()}}} and friends (an interrupt during {{{malloc()}}} will
mess up the heap, this happens sometimes with a "fixed" #9564!)
* eliminate race conditions as much as possible, like a SIGINT arriving
before {{{sig_on()}}} was called.
Other related tickets:
* #800 (make _sig_on and _sig_off faster when stacked)
* #9640 (Change PARI error catching mechanism)
* #9564 (libsingular exponentiation can not be interrupted)
* #7879 (Remove unnecessary signal handling for low prec mpfr operations)
--- hopefully {{{sig_on()}}} and {{{sig_off()}}} can be made very fast
such that this shouldn't be an issue anymore.
* #10018 (Unhandled SIGSEGV after bnfcertify())
* #7794 ({{{PolynomialRing_integral_domain}}} ignores Ctrl-C and
segfaults)
* #5313 (patch singular so that when it runs out of memory the error
message says "singular" in it)
* #3423 (Make Pari error messages more informative)
Dependency: #10115
--
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/9678#comment:14>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.