On Sun, Apr 5, 2009 at 12:33 AM, jeffblakeslee <jeffb...@gmail.com> wrote: > > Here's how I got it. Ctrl-c after a couple seconds on the first one, > and then try the next. > ---------------------------------------------------------------------- > | SAGE Version 3.0.6, Release Date: 2008-07-30 | > | Type notebook() for the GUI, and license() for information. | > ---------------------------------------------------------------------- > > sage: pi.n(9999999) > ^C ... > sage: pi.n(999)
Oh, interesting! I've always worried about _sig_on/_sig_off, but this is the first reproducible bug I've seen them cause. When Sage is computing pi to many digits (and in many other cases), it sets up a signal handler; if you press Control-C, then it will longjmp out of the signal handler. This lets you interrupt long-running computations, but it's a really nasty thing to do... you can easily get memory leaks, and I can imagine lots of (somewhat unlikely) situations where you would crash Sage or get wrong answers. I'm not sure what to do about the problem, though. The "right" fix is to go through all the C libraries that Sage calls, and add periodic checks for Control-C; but that's pretty impractical. Another possibility would be to disable _sig_on, so that Control-C doesn't work in long-running C computations. This would fix the bug, but it would also be vastly annoying. One workaround that might fix this particular problem is to catch KeyboardInterrupt exceptions in the .pi() method (and in .euler_constant(), .catalan_constant(), and .log2()), and call mpfr_free_cache() if one is seen. Hopefully then MPFR would no longer believe it has a higher precision value computed than it actually does have. Carl --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---