Allow je_malloc_message to be overridden when linking statically
If an application wants to override je_malloc_message, it is better to define the symbol locally than to change its value in main(), which might be too late for various reasons. Due to je_malloc_message being initialized in util.c, statically linking jemalloc with an application defining je_malloc_message fails due to "multiple definition of" the symbol. Defining it without a value (like je_malloc_conf) makes it more easily overridable.
This commit is contained in:
parent
80737c3323
commit
3597e91482
22
src/stats.c
22
src/stats.c
@ -295,16 +295,6 @@ stats_print(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (write_cb == NULL) {
|
|
||||||
/*
|
|
||||||
* The caller did not provide an alternate write_cb callback
|
|
||||||
* function, so use the default one. malloc_write() is an
|
|
||||||
* inline function, so use malloc_message() directly here.
|
|
||||||
*/
|
|
||||||
write_cb = je_malloc_message;
|
|
||||||
cbopaque = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts != NULL) {
|
if (opts != NULL) {
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
@ -330,7 +320,8 @@ stats_print(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
write_cb(cbopaque, "___ Begin jemalloc statistics ___\n");
|
malloc_cprintf(write_cb, cbopaque,
|
||||||
|
"___ Begin jemalloc statistics ___\n");
|
||||||
if (general) {
|
if (general) {
|
||||||
int err;
|
int err;
|
||||||
const char *cpv;
|
const char *cpv;
|
||||||
@ -375,7 +366,8 @@ stats_print(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
" opt."#n": \"%s\"\n", cpv); \
|
" opt."#n": \"%s\"\n", cpv); \
|
||||||
}
|
}
|
||||||
|
|
||||||
write_cb(cbopaque, "Run-time option settings:\n");
|
malloc_cprintf(write_cb, cbopaque,
|
||||||
|
"Run-time option settings:\n");
|
||||||
OPT_WRITE_BOOL(abort)
|
OPT_WRITE_BOOL(abort)
|
||||||
OPT_WRITE_SIZE_T(lg_chunk)
|
OPT_WRITE_SIZE_T(lg_chunk)
|
||||||
OPT_WRITE_SIZE_T(narenas)
|
OPT_WRITE_SIZE_T(narenas)
|
||||||
@ -425,7 +417,7 @@ stats_print(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
"Min active:dirty page ratio per arena: %u:1\n",
|
"Min active:dirty page ratio per arena: %u:1\n",
|
||||||
(1U << ssv));
|
(1U << ssv));
|
||||||
} else {
|
} else {
|
||||||
write_cb(cbopaque,
|
malloc_cprintf(write_cb, cbopaque,
|
||||||
"Min active:dirty page ratio per arena: N/A\n");
|
"Min active:dirty page ratio per arena: N/A\n");
|
||||||
}
|
}
|
||||||
if ((err = je_mallctl("arenas.tcache_max", &sv, &ssz, NULL, 0))
|
if ((err = je_mallctl("arenas.tcache_max", &sv, &ssz, NULL, 0))
|
||||||
@ -447,7 +439,7 @@ stats_print(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
" (2^%zd)\n",
|
" (2^%zd)\n",
|
||||||
(((uint64_t)1U) << ssv), ssv);
|
(((uint64_t)1U) << ssv), ssv);
|
||||||
} else {
|
} else {
|
||||||
write_cb(cbopaque,
|
malloc_cprintf(write_cb, cbopaque,
|
||||||
"Average profile dump interval: N/A\n");
|
"Average profile dump interval: N/A\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -547,5 +539,5 @@ stats_print(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
write_cb(cbopaque, "--- End jemalloc statistics ---\n");
|
malloc_cprintf(write_cb, cbopaque, "--- End jemalloc statistics ---\n");
|
||||||
}
|
}
|
||||||
|
11
src/util.c
11
src/util.c
@ -56,8 +56,7 @@ wrtmessage(void *cbopaque, const char *s)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
JEMALLOC_EXPORT void (*je_malloc_message)(void *, const char *s) =
|
JEMALLOC_EXPORT void (*je_malloc_message)(void *, const char *s);
|
||||||
wrtmessage;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wrapper around malloc_message() that avoids the need for
|
* Wrapper around malloc_message() that avoids the need for
|
||||||
@ -67,7 +66,10 @@ void
|
|||||||
malloc_write(const char *s)
|
malloc_write(const char *s)
|
||||||
{
|
{
|
||||||
|
|
||||||
je_malloc_message(NULL, s);
|
if (je_malloc_message != NULL)
|
||||||
|
je_malloc_message(NULL, s);
|
||||||
|
else
|
||||||
|
wrtmessage(NULL, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -606,7 +608,8 @@ malloc_vcprintf(void (*write_cb)(void *, const char *), void *cbopaque,
|
|||||||
* function, so use the default one. malloc_write() is an
|
* function, so use the default one. malloc_write() is an
|
||||||
* inline function, so use malloc_message() directly here.
|
* inline function, so use malloc_message() directly here.
|
||||||
*/
|
*/
|
||||||
write_cb = je_malloc_message;
|
write_cb = (je_malloc_message != NULL) ? je_malloc_message :
|
||||||
|
wrtmessage;
|
||||||
cbopaque = NULL;
|
cbopaque = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user