memory/jemalloc/src/test/ALLOCM_ARENA.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 #define	JEMALLOC_MANGLE
     2 #include "jemalloc_test.h"
     4 #define	NTHREADS 10
     6 void *
     7 je_thread_start(void *arg)
     8 {
     9 	unsigned thread_ind = (unsigned)(uintptr_t)arg;
    10 	unsigned arena_ind;
    11 	int r;
    12 	void *p;
    13 	size_t rsz, sz;
    15 	sz = sizeof(arena_ind);
    16 	if (mallctl("arenas.extend", &arena_ind, &sz, NULL, 0)
    17 	    != 0) {
    18 		malloc_printf("Error in arenas.extend\n");
    19 		abort();
    20 	}
    22 	if (thread_ind % 4 != 3) {
    23 		size_t mib[3];
    24 		size_t miblen = sizeof(mib) / sizeof(size_t);
    25 		const char *dss_precs[] = {"disabled", "primary", "secondary"};
    26 		const char *dss = dss_precs[thread_ind % 4];
    27 		if (mallctlnametomib("arena.0.dss", mib, &miblen) != 0) {
    28 			malloc_printf("Error in mallctlnametomib()\n");
    29 			abort();
    30 		}
    31 		mib[1] = arena_ind;
    32 		if (mallctlbymib(mib, miblen, NULL, NULL, (void *)&dss,
    33 		    sizeof(const char *))) {
    34 			malloc_printf("Error in mallctlbymib()\n");
    35 			abort();
    36 		}
    37 	}
    39 	r = allocm(&p, &rsz, 1, ALLOCM_ARENA(arena_ind));
    40 	if (r != ALLOCM_SUCCESS) {
    41 		malloc_printf("Unexpected allocm() error\n");
    42 		abort();
    43 	}
    45 	return (NULL);
    46 }
    48 int
    49 main(void)
    50 {
    51 	je_thread_t threads[NTHREADS];
    52 	unsigned i;
    54 	malloc_printf("Test begin\n");
    56 	for (i = 0; i < NTHREADS; i++) {
    57 		je_thread_create(&threads[i], je_thread_start,
    58 		    (void *)(uintptr_t)i);
    59 	}
    61 	for (i = 0; i < NTHREADS; i++)
    62 		je_thread_join(threads[i], NULL);
    64 	malloc_printf("Test end\n");
    65 	return (0);
    66 }

mercurial