You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.6 KiB

  1. #define JEMALLOC_MANGLE
  2. #include "jemalloc_test.h"
  3. #define NTHREADS 10
  4. void *
  5. je_thread_start(void *arg)
  6. {
  7. unsigned main_arena_ind = *(unsigned *)arg;
  8. void *p;
  9. unsigned arena_ind;
  10. size_t size;
  11. int err;
  12. p = malloc(1);
  13. if (p == NULL) {
  14. malloc_printf("%s(): Error in malloc()\n", __func__);
  15. return (void *)1;
  16. }
  17. free(p);
  18. size = sizeof(arena_ind);
  19. if ((err = mallctl("thread.arena", &arena_ind, &size, &main_arena_ind,
  20. sizeof(main_arena_ind)))) {
  21. malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
  22. strerror(err));
  23. return (void *)1;
  24. }
  25. size = sizeof(arena_ind);
  26. if ((err = mallctl("thread.arena", &arena_ind, &size, NULL,
  27. 0))) {
  28. malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
  29. strerror(err));
  30. return (void *)1;
  31. }
  32. assert(arena_ind == main_arena_ind);
  33. return (NULL);
  34. }
  35. int
  36. main(void)
  37. {
  38. int ret = 0;
  39. void *p;
  40. unsigned arena_ind;
  41. size_t size;
  42. int err;
  43. je_thread_t threads[NTHREADS];
  44. unsigned i;
  45. malloc_printf("Test begin\n");
  46. p = malloc(1);
  47. if (p == NULL) {
  48. malloc_printf("%s(): Error in malloc()\n", __func__);
  49. ret = 1;
  50. goto label_return;
  51. }
  52. size = sizeof(arena_ind);
  53. if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
  54. malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
  55. strerror(err));
  56. ret = 1;
  57. goto label_return;
  58. }
  59. for (i = 0; i < NTHREADS; i++) {
  60. je_thread_create(&threads[i], je_thread_start,
  61. (void *)&arena_ind);
  62. }
  63. for (i = 0; i < NTHREADS; i++)
  64. je_thread_join(threads[i], (void *)&ret);
  65. label_return:
  66. malloc_printf("Test end\n");
  67. return (ret);
  68. }