Re: Better behaviour for interactive apps on leaf overflow?

Aidan Kehoe <[email protected]>
Newsgroups gmane.emacs.xemacs.beta
Message-ID <[email protected]>
Hello again  --

OK, let me be a bit more explicit. There is no way as it stands to prevent
GMP from calling abort() with overflow of a leaf. This is a bug for our use
case, a long-running interactive program that needs to crash as little as
possible. Please add a way to prevent GMP from calling abort() when
anticipated overflow of a leaf is encoutered.

Best,

Aidan

 Ar an deichiú lá de mí Aibréan, scríobh [email protected]: 

 > Your request to the gmp-bugs mailing list
 > 
 >     Posting of your message titled "Better behaviour for interactive
 > apps on leaf overflow?"
 > 
 > has been rejected by the list moderator.  The moderator gave the
 > following reason for rejecting your request:
 > 
 > "The moderator found no bug report in your message."
 > 
 > Any questions or comments should be directed to the list administrator
 > at:
 > 
 >     [email protected]

 Ar an deichiú lá de mí Aibréan, scríobh Aidan Kehoe: 

 > 
 > Hello!
 > 
 > We’ve been using libgmp for our bignum support in XEmacs for a decade or so
 > now, thanks to Jerry James, one of our more active developers. XEmacs Lisp is
 > in spirit a Lisp-2 close in philosophy and history to Common Lisp, and it’s
 > correct and pleasant to have good bignum support.
 > 
 > One of our design (and implementation!) goals for XEmacs Lisp is that it
 > should be impossible for Lisp to crash XEmacs, something very important in
 > preserving our users’ data. We supply our own allocation functions to gmp and
 > handle our failures ourselves to minimise the risk of that happening. But, it
 > is still perfectly possible for Lisp to do something like this, where lsh is
 > the bitwise left shift operation, and most-positive-fixnum is 2 to the 30th
 > minus one:
 > 
 > (lsh (lsh most-positive-fixnum #xFFFFFF80) #xFFFFFF80)
 > 
 > On a 32-bit machine this will eventually fail with the following message:
 > 
 > (gdb) r -batch -eval "(lsh (lsh most-positive-fixnum #xFFFFFF80) #xFFFFFF80)"
 > Starting program: /Sources/xemacs-21.5-integer-length/src/xemacs -batch -eval "(lsh (lsh most-positive-fixnum #xFFFFFF80) #xFFFFFF80)"
 > gmp: overflow in mpz type
 > Program received signal SIGABRT, Aborted.
 > 0x95187c5a in __kill () from /usr/lib/libSystem.B.dylib
 > (gdb) 
 > 
 > Now, this abort isn’t wrapped, gmp calls it unconditionally in
 > realloc.c:_mpz_realloc(). This is frustrating for XEmacs; from our
 > perspective, we’d like to throw an error in this situation in the same way we
 > do when we divide by zero, rather than crash the entire process and have the
 > user lose so much of his or her state. Our garbage collector will take care of
 > the lost memory. 
 > 
 > Best,
 > 
 > Aidan Kehoe


-- 
‘Tramadol is further fed to cattle […] when working them […] (as draft
animals) so that the animals do not get tired quickly. …’
	— Angewandte Chemie, Sept 2014, describing the social context of
	(synthetic) tramadol having been found in Cameroon tree roots.

_______________________________________________
XEmacs-Beta mailing list
[email protected]
http://lists.xemacs.org/mailman/listinfo/xemacs-beta
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.