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; 32772163b4f3d8e9a12343e9215f6b070068507604Jason Evans assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)), 33772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 0, "Unexpected mallctl failure while activating profiling"); 34772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 35772163b4f3d8e9a12343e9215f6b070068507604Jason Evans prof_dump_open = prof_dump_open_intercept; 36772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 37772163b4f3d8e9a12343e9215f6b070068507604Jason Evans did_prof_dump_open = false; 38772163b4f3d8e9a12343e9215f6b070068507604Jason Evans p = mallocx(1, 0); 39772163b4f3d8e9a12343e9215f6b070068507604Jason Evans assert_ptr_not_null(p, "Unexpected mallocx() failure"); 40772163b4f3d8e9a12343e9215f6b070068507604Jason Evans dallocx(p, 0); 41772163b4f3d8e9a12343e9215f6b070068507604Jason Evans assert_true(did_prof_dump_open, "Expected a profile dump"); 42772163b4f3d8e9a12343e9215f6b070068507604Jason Evans} 43772163b4f3d8e9a12343e9215f6b070068507604Jason EvansTEST_END 44772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 45772163b4f3d8e9a12343e9215f6b070068507604Jason Evansint 46772163b4f3d8e9a12343e9215f6b070068507604Jason Evansmain(void) 47772163b4f3d8e9a12343e9215f6b070068507604Jason Evans{ 48772163b4f3d8e9a12343e9215f6b070068507604Jason Evans 49772163b4f3d8e9a12343e9215f6b070068507604Jason Evans return (test( 50772163b4f3d8e9a12343e9215f6b070068507604Jason Evans test_idump)); 51772163b4f3d8e9a12343e9215f6b070068507604Jason Evans} 52