1772163b4f3d8e9a12343e9215f6b070068507604Jason Evans#include "test/jemalloc_test.h" 2772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 3772163b4f3d8e9a12343e9215f6b070068507604Jason Evans#ifdef JEMALLOC_PROF 4772163b4f3d8e9a12343e9215f6b070068507604Jason Evansconst char *malloc_conf = 5772163b4f3d8e9a12343e9215f6b070068507604Jason Evans "prof:true,prof_accum:true,prof_active:false,lg_prof_sample:0," 6772163b4f3d8e9a12343e9215f6b070068507604Jason Evans "lg_prof_interval:0"; 7772163b4f3d8e9a12343e9215f6b070068507604Jason Evans#endif 8772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 9772163b4f3d8e9a12343e9215f6b070068507604Jason Evansstatic bool did_prof_dump_open; 10772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 11772163b4f3d8e9a12343e9215f6b070068507604Jason Evansstatic int 12772163b4f3d8e9a12343e9215f6b070068507604Jason Evansprof_dump_open_intercept(bool propagate_err, const char *filename) 13772163b4f3d8e9a12343e9215f6b070068507604Jason Evans{ 14772163b4f3d8e9a12343e9215f6b070068507604Jason Evans int fd; 15772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 16772163b4f3d8e9a12343e9215f6b070068507604Jason Evans did_prof_dump_open = true; 17772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 18772163b4f3d8e9a12343e9215f6b070068507604Jason Evans fd = open("/dev/null", O_WRONLY); 19772163b4f3d8e9a12343e9215f6b070068507604Jason Evans assert_d_ne(fd, -1, "Unexpected open() failure"); 20772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 21772163b4f3d8e9a12343e9215f6b070068507604Jason Evans return (fd); 22772163b4f3d8e9a12343e9215f6b070068507604Jason Evans} 23772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 24772163b4f3d8e9a12343e9215f6b070068507604Jason EvansTEST_BEGIN(test_idump) 25772163b4f3d8e9a12343e9215f6b070068507604Jason Evans{ 26772163b4f3d8e9a12343e9215f6b070068507604Jason Evans bool active; 27772163b4f3d8e9a12343e9215f6b070068507604Jason Evans void *p; 28772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 29772163b4f3d8e9a12343e9215f6b070068507604Jason Evans test_skip_if(!config_prof); 30772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 31772163b4f3d8e9a12343e9215f6b070068507604Jason Evans active = true; 328f61fdedb908c29905103b22dda32ceb29cd8edeJason Evans assert_d_eq(mallctl("prof.active", NULL, NULL, (void *)&active, 338f61fdedb908c29905103b22dda32ceb29cd8edeJason Evans sizeof(active)), 0, 348f61fdedb908c29905103b22dda32ceb29cd8edeJason Evans "Unexpected mallctl failure while activating profiling"); 35772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 36772163b4f3d8e9a12343e9215f6b070068507604Jason Evans prof_dump_open = prof_dump_open_intercept; 37772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 38772163b4f3d8e9a12343e9215f6b070068507604Jason Evans did_prof_dump_open = false; 39772163b4f3d8e9a12343e9215f6b070068507604Jason Evans p = mallocx(1, 0); 40772163b4f3d8e9a12343e9215f6b070068507604Jason Evans assert_ptr_not_null(p, "Unexpected mallocx() failure"); 41772163b4f3d8e9a12343e9215f6b070068507604Jason Evans dallocx(p, 0); 42772163b4f3d8e9a12343e9215f6b070068507604Jason Evans assert_true(did_prof_dump_open, "Expected a profile dump"); 43772163b4f3d8e9a12343e9215f6b070068507604Jason Evans} 44772163b4f3d8e9a12343e9215f6b070068507604Jason EvansTEST_END 45772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 46772163b4f3d8e9a12343e9215f6b070068507604Jason Evansint 47772163b4f3d8e9a12343e9215f6b070068507604Jason Evansmain(void) 48772163b4f3d8e9a12343e9215f6b070068507604Jason Evans{ 49772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 50772163b4f3d8e9a12343e9215f6b070068507604Jason Evans return (test( 51772163b4f3d8e9a12343e9215f6b070068507604Jason Evans test_idump)); 52772163b4f3d8e9a12343e9215f6b070068507604Jason Evans} 53