123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #define JEMALLOC_MANGLE
- #include "jemalloc_test.h"
- void *
- je_thread_start(void *arg)
- {
- int err;
- void *p;
- uint64_t a0, a1, d0, d1;
- uint64_t *ap0, *ap1, *dp0, *dp1;
- size_t sz, usize;
- sz = sizeof(a0);
- if ((err = mallctl("thread.allocated", &a0, &sz, NULL, 0))) {
- if (err == ENOENT) {
- #ifdef JEMALLOC_STATS
- assert(false);
- #endif
- goto label_return;
- }
- malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
- strerror(err));
- exit(1);
- }
- sz = sizeof(ap0);
- if ((err = mallctl("thread.allocatedp", &ap0, &sz, NULL, 0))) {
- if (err == ENOENT) {
- #ifdef JEMALLOC_STATS
- assert(false);
- #endif
- goto label_return;
- }
- malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
- strerror(err));
- exit(1);
- }
- assert(*ap0 == a0);
- sz = sizeof(d0);
- if ((err = mallctl("thread.deallocated", &d0, &sz, NULL, 0))) {
- if (err == ENOENT) {
- #ifdef JEMALLOC_STATS
- assert(false);
- #endif
- goto label_return;
- }
- malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
- strerror(err));
- exit(1);
- }
- sz = sizeof(dp0);
- if ((err = mallctl("thread.deallocatedp", &dp0, &sz, NULL, 0))) {
- if (err == ENOENT) {
- #ifdef JEMALLOC_STATS
- assert(false);
- #endif
- goto label_return;
- }
- malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
- strerror(err));
- exit(1);
- }
- assert(*dp0 == d0);
- p = malloc(1);
- if (p == NULL) {
- malloc_printf("%s(): Error in malloc()\n", __func__);
- exit(1);
- }
- sz = sizeof(a1);
- mallctl("thread.allocated", &a1, &sz, NULL, 0);
- sz = sizeof(ap1);
- mallctl("thread.allocatedp", &ap1, &sz, NULL, 0);
- assert(*ap1 == a1);
- assert(ap0 == ap1);
- usize = malloc_usable_size(p);
- assert(a0 + usize <= a1);
- free(p);
- sz = sizeof(d1);
- mallctl("thread.deallocated", &d1, &sz, NULL, 0);
- sz = sizeof(dp1);
- mallctl("thread.deallocatedp", &dp1, &sz, NULL, 0);
- assert(*dp1 == d1);
- assert(dp0 == dp1);
- assert(d0 + usize <= d1);
- label_return:
- return (NULL);
- }
- int
- main(void)
- {
- int ret = 0;
- je_thread_t thread;
- malloc_printf("Test begin\n");
- je_thread_start(NULL);
- je_thread_create(&thread, je_thread_start, NULL);
- je_thread_join(thread, (void *)&ret);
- je_thread_start(NULL);
- je_thread_create(&thread, je_thread_start, NULL);
- je_thread_join(thread, (void *)&ret);
- je_thread_start(NULL);
- malloc_printf("Test end\n");
- return (ret);
- }
|