Improve stability of the jemalloc workaround

When jemalloc is linked into BIND 9 binaries (rather than preloaded or used as the system allocator), depending on the decisions made by the linker, the malloc() symbol may be resolved to a non-jemalloc implementation at runtime. Such a scenario foils the workaround added in commit 2da371d0 as it relies on the jemalloc implementation of malloc() to be executed.

Handle the above scenario properly by calling mallocx() explicitly instead of relying on the runtime resolution of the malloc() symbol. Use trivial wrapper functions to avoid the need to copy multiple #ifdef lines from lib/isc/mem.c to lib/isc/trampoline.c. Using a simpler alternative, e.g. calling isc_mem_create() & isc_mem_destroy(), was already considered before and rejected, as described in the log message for commit 2da371d0.

ADJUST_ZERO_ALLOCATION_SIZE() is only used in isc__mem_free_noctx() to concisely avoid compilation warnings about its 'size' parameter not being used when building against jemalloc < 4.0.0 (as sdallocx() is then redefined to dallocx(), which has a different signature).

Closes #4404 (closed)

See also #3287 (closed)

Edited by Michał Kępień

Merge request reports