-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Memory management routines of flint can crash interpreter #244
Comments
You can try to recover from a memory error in GMP or FLINT by intercepting the abort signal, it's just risky. You'll be fine most of the time but you risk leaking memory and occasionally corrupting data. Sage does this for FLINT so it should be possible to do the same thing in python-flint:
|
On Sat, Nov 23, 2024 at 02:06:52AM -0800, Fredrik Johansson wrote:
You can try to recover from a memory error in GMP or FLINT by intercepting
the abort signal, it's just risky. You'll be fine most of the time but you
risk leaking memory and occasionally corrupting data.
I'm not sure why you guess about "most of time". IMO, this is worse
than plain abort() - essentially you left program (e.g. Python
interpreter) in some undefined state, from which you can't recover (or
save your data). Perhaps, this may work sometimes, e.g. in my or your
examples: when you in one shot trying to allocate too much memory. But
this looks rather an artificial case.
GMP seems to be correct here: "Getting a different fatal error action is
a good use for custom allocation functions" (c). E.g.
aleaxit/gmpy#513
|
Would I had been considering whether python-flint should use cysignals. There is some discussion on the sage mailing list about making cysignals work on Windows. |
From sources it looks so. But I don't think it's a good idea. See e.g. the mpdecimal - it's possible to propagate memory errors to the caller. Sadly, but that probably will require API changes for flint. So, perhaps, it's not an option. BTW, I'm working on a "safe" GMP wrapper, that can be an alternative to gmpy2 for mpmath or diofant. Edit: https://github.com/diofant/python-gmp/ - here it's. |
Consider:
Unfortunately, https://flintlib.org/doc/memory.html page lacks notes like the GMP manual, "13. Custom allocation": "There’s currently no defined way for the allocation functions to recover from an error such as out of memory, they must terminate program execution."
Or this is a flint bug, not a docs issue? It seems, despite fmpz_t is a re-implemented (using low-level mpn_* functions) mpz_t - it shares same memory-management behaviour. In this case it could be possible to carefully propagate memory errors.
The text was updated successfully, but these errors were encountered: