memory/jemalloc/src/test/thread_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 main_arena_ind = *(unsigned *)arg;
    10 	void *p;
    11 	unsigned arena_ind;
    12 	size_t size;
    13 	int err;
    15 	p = malloc(1);
    16 	if (p == NULL) {
    17 		malloc_printf("%s(): Error in malloc()\n", __func__);
    18 		return (void *)1;
    19 	}
    21 	size = sizeof(arena_ind);
    22 	if ((err = mallctl("thread.arena", &arena_ind, &size, &main_arena_ind,
    23 	    sizeof(main_arena_ind)))) {
    24 		malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
    25 		    strerror(err));
    26 		return (void *)1;
    27 	}
    29 	size = sizeof(arena_ind);
    30 	if ((err = mallctl("thread.arena", &arena_ind, &size, NULL,
    31 	    0))) {
    32 		malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
    33 		    strerror(err));
    34 		return (void *)1;
    35 	}
    36 	assert(arena_ind == main_arena_ind);
    38 	return (NULL);
    39 }
    41 int
    42 main(void)
    43 {
    44 	int ret = 0;
    45 	void *p;
    46 	unsigned arena_ind;
    47 	size_t size;
    48 	int err;
    49 	je_thread_t threads[NTHREADS];
    50 	unsigned i;
    52 	malloc_printf("Test begin\n");
    54 	p = malloc(1);
    55 	if (p == NULL) {
    56 		malloc_printf("%s(): Error in malloc()\n", __func__);
    57 		ret = 1;
    58 		goto label_return;
    59 	}
    61 	size = sizeof(arena_ind);
    62 	if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
    63 		malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
    64 		    strerror(err));
    65 		ret = 1;
    66 		goto label_return;
    67 	}
    69 	for (i = 0; i < NTHREADS; i++) {
    70 		je_thread_create(&threads[i], je_thread_start,
    71 		    (void *)&arena_ind);
    72 	}
    74 	for (i = 0; i < NTHREADS; i++)
    75 		je_thread_join(threads[i], (void *)&ret);
    77 label_return:
    78 	malloc_printf("Test end\n");
    79 	return (ret);
    80 }

mercurial