Bill Allombert on Thu, 19 May 2016 21:59:13 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: GMP memory allocation and Macaulay2 |
On Thu, May 19, 2016 at 02:58:16PM -0400, Doug Torrance wrote: > Hello! > > Currently, PARI sets the GMP memory allocation functions in > pari_kernel_init(). However, this may cause problems for > applications which use both the PARI and GMP libraries such as > Macaulay2. Building Macaulay2 against unpatched GMP and PARI > libraries causes segmentation faults. You issue is related to the bug #1317. Do you know why the segmentation faults occurs ? This is the crux of the matter. > Currently, Macaulay2 builds its own GMP (actually MPIR, a drop-in > replacement) in which mp_set_memory_functions() does nothing. This > is not ideal, however. For example, this is the main problem > keeping Macaulay2 out of Debian, as it cannot be built with the > current Debian GMP and PARI packages. (See [1] for some discussion > on this matter.) > > Would it be possible to remove the calls to > mp_set_memory_functions() from PARI? PARI only runs pari_kernel_init() once (in pari_init_opts), so you can just write a wrapper around pari_init() or pari_init_opts() that saves the values returned by mp_get_memory_functions() and resets them using mp_set_memory_functions() just after pari_init: void my_pari_init_opts(size_t parisize, ulong maxprime, ulong init_opts) { void *(*new_gmp_malloc)(size_t new_size); void *(*new_gmp_realloc)(void *ptr, size_t old_size, size_t new_size); void (*new_gmp_free)(void *ptr, size_t old_size); mp_get_memory_functions (&new_gmp_malloc, &new_gmp_realloc, &new_gmp_free); pari_init_opts(parisize,maxprime,init_opts); mp_set_memory_functions(new_gmp_malloc, new_gmp_realloc, new_gmp_free); } It is not possible to remove the call to mp_set_memory_functions() from the Debian packages in a reasonable timeframe. Cheers, Bill.