diff -up src/sage/libs/pari/decl.pxi.orig src/sage/libs/pari/decl.pxi --- src/sage/libs/pari/decl.pxi.orig 2015-04-03 17:09:59.840683372 -0300 +++ src/sage/libs/pari/decl.pxi 2015-04-03 17:10:10.876683795 -0300 @@ -165,7 +165,6 @@ cdef extern from 'parisage.h': extern int new_galois_format, precdl # The "except 0" here is to ensure compatibility with # _pari_err_handle() in handle_error.pyx - extern int (*cb_pari_err_handle)(GEN) except 0 extern int (*cb_pari_handle_exception)(long) except 0 extern void (*cb_pari_err_recover)(long) @@ -3757,6 +3756,3 @@ cdef extern from 'pari/paripriv.h': unsigned long flags extern gp_data* GP_DATA - -cdef extern from 'pari/anal.h': - char* closure_func_err() diff -up src/sage/libs/pari/handle_error.pyx.orig src/sage/libs/pari/handle_error.pyx --- src/sage/libs/pari/handle_error.pyx.orig 2015-04-03 17:09:59.842683372 -0300 +++ src/sage/libs/pari/handle_error.pyx 2015-04-03 17:10:10.876683795 -0300 @@ -131,13 +131,13 @@ cdef void _pari_init_error_handling(): sage: pari('warning("test")') *** user warning: test """ - global cb_pari_err_handle + global cb_pari_handle_exception global cb_pari_err_recover - cb_pari_err_handle = _pari_err_handle + cb_pari_handle_exception = _pari_handle_exception cb_pari_err_recover = _pari_err_recover -cdef int _pari_err_handle(GEN E) except 0: +cdef int _pari_handle_exception(long errnum_unused) except 0: """ Convert a PARI error into a Sage exception, unless the error was a stack overflow, in which case we enlarge the stack. @@ -156,6 +156,7 @@ cdef int _pari_err_handle(GEN E) except PariError: impossible inverse in gdiv: 0 """ + cdef GEN E = pari_err_last() cdef long errnum = E[1] if errnum == e_STACK: # PARI is out of memory. We double the size of the PARI stack @@ -165,15 +166,10 @@ cdef int _pari_err_handle(GEN E) except sig_block() cdef char* errstr - cdef char* s try: errstr = pari_err2str(E) pari_error_string = errstr.decode('ascii') - s = closure_func_err() - if s is not NULL: - pari_error_string = s.decode('ascii') + ": " + pari_error_string - raise PariError(errnum, pari_error_string, pari_instance.new_gen_noclear(E)) finally: pari_free(errstr) diff -up src/sage/libs/pari/pari_instance.pxd.orig src/sage/libs/pari/pari_instance.pxd --- src/sage/libs/pari/pari_instance.pxd.orig 2015-04-03 17:09:59.834683372 -0300 +++ src/sage/libs/pari/pari_instance.pxd 2015-04-03 17:10:10.874683795 -0300 @@ -6,6 +6,10 @@ cimport cython from sage.libs.pari.gen cimport gen +cdef extern from "gmp.h": + cdef void mp_get_memory_functions(void**, void**, void**) + cdef void mp_set_memory_functions(void*, void*, void*) + cpdef long prec_bits_to_words(unsigned long prec_in_bits) @cython.final diff -up src/sage/libs/pari/pari_instance.pyx.orig src/sage/libs/pari/pari_instance.pyx --- src/sage/libs/pari/pari_instance.pyx.orig 2015-04-03 17:09:59.835683372 -0300 +++ src/sage/libs/pari/pari_instance.pyx 2015-04-03 17:10:10.874683795 -0300 @@ -417,7 +417,12 @@ cdef class PariInstance(sage.structure.p # The size here doesn't really matter, because we will allocate # our own stack anyway. We ask PARI not to set up signal and # error handlers. + cdef void *_gmp_malloc + cdef void *_gmp_realloc + cdef void *_gmp_free + mp_get_memory_functions(&_gmp_malloc, &_gmp_realloc, &_gmp_free) pari_init_opts(10000, maxprime, INIT_DFTm) + mp_set_memory_functions(_gmp_malloc, _gmp_realloc, _gmp_free) _pari_init_error_handling() diff -up src/sage/libs/pari/handle_error.pxd.orig src/sage/libs/pari/handle_error.pxd --- src/sage/libs/pari/handle_error.pxd.orig 2015-04-03 17:14:16.506693201 -0300 +++ src/sage/libs/pari/handle_error.pxd 2015-04-03 17:14:44.287694265 -0300 @@ -1,5 +1,5 @@ include 'sage/libs/pari/decl.pxi' cdef void _pari_init_error_handling() -cdef int _pari_err_handle(GEN E) except 0 +cdef int _pari_handle_exception(long errnum_unused) except 0 cdef void _pari_err_recover(long errnum)