From 4c2ef7f3eac3c7d18c8d8fc248b5372886c4c12a Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Mon, 14 Sep 2015 09:33:17 +0200 Subject: [PATCH] core: new command line options for memory managers selections - -x name: select the memory manager for shm - -X name: select the memory manager for pkg - -f -x is provided but -X is not provided, then pkg uses same memory manager as shm - name can be: - fm - fast malloc (f_malloc) - qm - quick malloc (q_malloc) - default memory manager is fm - other changes: adjustments to init pkg and shm using new memory management api --- main.c | 53 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/main.c b/main.c index 1ff7f6af999..4fd168dab21 100644 --- a/main.c +++ b/main.c @@ -497,6 +497,12 @@ char* pid_file = 0; /* filename as asked by use */ char* pgid_file = 0; +/* memory manager */ +#define SR_MEMMNG_DEFAULT "fm" + +char *sr_memmng_pkg = NULL; +char *sr_memmng_shm = NULL; + /* call it before exiting; if show_status==1, mem status is displayed */ void cleanup(show_status) { @@ -504,7 +510,7 @@ void cleanup(show_status) /*clean-up*/ #ifndef SHM_SAFE_MALLOC - if (mem_lock) + if (_shm_lock) shm_unlock(); /* hack: force-unlock the shared memory lock in case some process crashed and let it locked; this will allow an almost gracious shutdown */ @@ -571,12 +577,12 @@ void cleanup(show_status) } } /* zero all shmem alloc vars that we still use */ - shm_mem_destroy(); + shm_destroy_manager(); #endif destroy_lock_ops(); if (pid_file) unlink(pid_file); if (pgid_file) unlink(pgid_file); - destroy_pkg_mallocs(); + pkg_destroy_manager(); } @@ -1807,7 +1813,7 @@ int main(int argc, char** argv) dprint_init_colors(); /* command line options */ - options= ":f:cm:M:dVIhEeb:l:L:n:vKrRDTN:W:w:t:u:g:P:G:SQ:O:a:A:" + options= ":f:cm:M:dVIhEeb:l:L:n:vKrRDTN:W:w:t:u:g:P:G:SQ:O:a:A:x:X:" #ifdef STATS "s:" #endif @@ -1841,6 +1847,12 @@ int main(int argc, char** argv) goto error; }; break; + case 'x': + sr_memmng_shm = optarg; + break; + case 'X': + sr_memmng_pkg = optarg; + break; default: if (c == 'h' || (optarg && strcmp(optarg, "-h") == 0)) { printf("version: %s\n", full_version); @@ -1850,11 +1862,26 @@ int main(int argc, char** argv) break; } } - + + if(sr_memmng_pkg==NULL) { + if(sr_memmng_shm!=NULL) { + sr_memmng_pkg = sr_memmng_shm; + } else { + sr_memmng_pkg = SR_MEMMNG_DEFAULT; + } + } + if(sr_memmng_shm==NULL) { + sr_memmng_shm = SR_MEMMNG_DEFAULT; + } + shm_set_mname(sr_memmng_shm); + if (pkg_mem_size == 0) { + pkg_mem_size = PKG_MEM_POOL_SIZE; + } + /*init pkg mallocs (before parsing cfg or the rest of the cmd line !)*/ if (pkg_mem_size) LM_INFO("private (per process) memory: %ld bytes\n", pkg_mem_size ); - if (init_pkg_mallocs()==-1) + if (pkg_init_manager(sr_memmng_pkg)<0) goto error; #ifdef DBG_MSG_QA @@ -1873,6 +1900,11 @@ int main(int argc, char** argv) /* switches required before script processing */ while((c=getopt(argc,argv,options))!=-1) { switch(c) { + case 'M': + case 'x': + case 'X': + /* ignore, they were parsed immediately after startup */ + break; case 'f': cfg_file=optarg; break; @@ -1893,10 +1925,6 @@ int main(int argc, char** argv) }; LM_INFO("shared memory: %ld bytes\n", shm_mem_size ); break; - case 'M': - /* ignore it, it was parsed immediately after startup, - the pkg mem. is already initialized at this point */ - break; case 'd': /* ignore it, was parsed immediately after startup */ break; @@ -1997,6 +2025,9 @@ int main(int argc, char** argv) abort(); } } + if (shm_mem_size == 0) { + shm_mem_size = SHM_MEM_POOL_SIZE; + } if (endianness_sanity_check() != 0){ fprintf(stderr, "BUG: endianness sanity tests failed\n"); @@ -2357,6 +2388,8 @@ int main(int argc, char** argv) if (!shm_initialized() && init_shm()<0) goto error; #endif /* SHM_MEM */ + pkg_print_manager(); + shm_print_manager(); if (init_atomic_ops()==-1) goto error; if (init_basex() != 0){