| 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.