Module: sip-router Branch: master Commit: d740c34e417acd84d0ccad47fc65af2668d09654 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=d740c34e...
Author: Andrei Pelinescu-Onciul andrei@iptel.org Committer: Andrei Pelinescu-Onciul andrei@iptel.org Date: Tue Sep 29 13:32:48 2009 +0200
core: added mem_summary config option
- added mem_summary which controls the memory debugging info logged on exit or on SIGUSR1. Its value is a combination of flags: 0 - off, 1 - dump all used memory blocks and some statistics (lots of output), 2 - dump a summary of the used memory blocks (works only if compiled with DBG_QM_MALLOC or DBG_F_MALLOC). The default value is 1 (same behaviour as older versions).
- fix: don't call the memory status/summary functions if memlog > debug level (since nothing will be logged anyway).
---
NEWS | 7 +++++++ cfg.lex | 2 ++ cfg.y | 3 +++ cfg_core.c | 6 +++++- cfg_core.h | 1 + main.c | 57 +++++++++++++++++++++++++++++++++++++++++++++------------ 6 files changed, 63 insertions(+), 13 deletions(-)
diff --git a/NEWS b/NEWS index 7cd7fff..3cd2de4 100644 --- a/NEWS +++ b/NEWS @@ -72,6 +72,13 @@ new config variables: - max_while_loops - maximum iterations allowed for a while (can be changed at runtime). Default 100. - log_name - set the application name used when printing to syslog. + - mem_summary - memory debugging info logged on exit or on SIGUSR1. + The value is a combination of flags: 0 - off, + 1 - dump all used memory blocks and some statistics (lots of output), + 2 - dump a summary of the used memory blocks (works only if + compiled with DBG_QM_MALLOC or DBG_F_MALLOC). + Default: 1. + Can be changed at runtime.
new script commands: add_local_rport() - adds the rport parameter to the added via header diff --git a/cfg.lex b/cfg.lex index bedf79c..8490364 100644 --- a/cfg.lex +++ b/cfg.lex @@ -353,6 +353,7 @@ PHONE2TEL phone2tel SYN_BRANCH syn_branch MEMLOG "memlog"|"mem_log" MEMDBG "memdbg"|"mem_dbg" +MEMSUM "mem_summary" SIP_WARNING sip_warning SERVER_SIGNATURE server_signature SERVER_HEADER server_header @@ -688,6 +689,7 @@ EAT_ABLE [\ \t\b\r] <INITIAL>{SYN_BRANCH} { count(); yylval.strval=yytext; return SYN_BRANCH; } <INITIAL>{MEMLOG} { count(); yylval.strval=yytext; return MEMLOG; } <INITIAL>{MEMDBG} { count(); yylval.strval=yytext; return MEMDBG; } +<INITIAL>{MEMSUM} { count(); yylval.strval=yytext; return MEMSUM; } <INITIAL>{SIP_WARNING} { count(); yylval.strval=yytext; return SIP_WARNING; } <INITIAL>{USER} { count(); yylval.strval=yytext; return USER; } <INITIAL>{GROUP} { count(); yylval.strval=yytext; return GROUP; } diff --git a/cfg.y b/cfg.y index fe8cbf2..ff56515 100644 --- a/cfg.y +++ b/cfg.y @@ -408,6 +408,7 @@ extern char *finame; %token SYN_BRANCH %token MEMLOG %token MEMDBG +%token MEMSUM %token SIP_WARNING %token SERVER_SIGNATURE %token SERVER_HEADER @@ -863,6 +864,8 @@ assign_stm: | MEMLOG EQUAL error { yyerror("int value expected"); } | MEMDBG EQUAL intno { memdbg=$3; } | MEMDBG EQUAL error { yyerror("int value expected"); } + | MEMSUM EQUAL intno { default_core_cfg.mem_summary=$3; } + | MEMSUM EQUAL error { yyerror("int value expected"); } | SIP_WARNING EQUAL NUMBER { sip_warning=$3; } | SIP_WARNING EQUAL error { yyerror("boolean value expected"); } | USER EQUAL STRING { user=$3; } diff --git a/cfg_core.c b/cfg_core.c index 778a4dd..ce0ae50 100644 --- a/cfg_core.c +++ b/cfg_core.c @@ -92,7 +92,8 @@ struct cfg_group_core default_core_cfg = { DEFAULT_MAX_WHILE_LOOPS, /* max_while_loops */ 0, /* udp_mtu (disabled by default) */ 0, /* udp_mtu_try_proto -> default disabled */ - 0 /* force_rport */ + 0, /* force_rport */ + 1 /* mem_summary -flags: 0 off, 1 shm/pkg_status, 2 shm/pkg_sums */ };
void *core_cfg = &default_core_cfg; @@ -191,5 +192,8 @@ cfg_def_t core_cfg_def[] = { "if send size > udp_mtu use proto (1 udp, 2 tcp, 3 tls, 4 sctp)"}, {"force_rport", CFG_VAR_INT, 0, 1, 0, fix_global_req_flags, "force rport for all the received messages" }, + {"mem_summary", CFG_VAR_INT|CFG_ATOMIC, 0, 3, 0, 0, + "memory debugging information displayed on exit (flags): " + " 0 - off, 1 - dump all used blocks, 2 - summary of used blocks" }, {0, 0, 0, 0, 0, 0} }; diff --git a/cfg_core.h b/cfg_core.h index 4f493ef..dd5d7af 100644 --- a/cfg_core.h +++ b/cfg_core.h @@ -89,6 +89,7 @@ struct cfg_group_core { int udp_mtu; /**< maximum send size for udp, if > try another protocol*/ int udp_mtu_try_proto; /**< if packet> udp_mtu, try proto (e.g. TCP) */ int force_rport; /**< if set rport will always be forced*/ + int mem_summary; /**< display memory status/summary info on exit */ };
extern struct cfg_group_core default_core_cfg; diff --git a/main.c b/main.c index 6d85a57..0965051 100644 --- a/main.c +++ b/main.c @@ -529,21 +529,29 @@ void cleanup(show_status) destroy_routes(); destroy_atomic_ops(); #ifdef PKG_MALLOC - if (show_status){ - LOG(memlog, "Memory status (pkg):\n"); - pkg_status(); - LOG(memlog, "Memory still-in-use summary (pkg):\n"); - pkg_sums(); + if (show_status && memlog <= cfg_get(core, core_cfg, debug)){ + if (cfg_get(core, core_cfg, mem_summary) & 1) { + LOG(memlog, "Memory status (pkg):\n"); + pkg_status(); + } + if (cfg_get(core, core_cfg, mem_summary) & 2) { + LOG(memlog, "Memory still-in-use summary (pkg):\n"); + pkg_sums(); + } } #endif #ifdef SHM_MEM if (pt) shm_free(pt); pt=0; - if (show_status){ + if (show_status && memlog <= cfg_get(core, core_cfg, debug)){ + if (cfg_get(core, core_cfg, mem_summary) & 1) { LOG(memlog, "Memory status (shm):\n"); shm_status(); + } + if (cfg_get(core, core_cfg, mem_summary) & 2) { LOG(memlog, "Memory still-in-use summary (shm):\n"); shm_sums(); + } } /* zero all shmem alloc vars that we still use */ shm_mem_destroy(); @@ -664,12 +672,28 @@ void handle_sigs() dump_all_statistic(); #endif #ifdef PKG_MALLOC - LOG(memlog, "Memory status (pkg):\n"); - pkg_status(); + if (memlog <= cfg_get(core, core_cfg, debug)){ + if (cfg_get(core, core_cfg, mem_summary) & 1) { + LOG(memlog, "Memory status (pkg):\n"); + pkg_status(); + } + if (cfg_get(core, core_cfg, mem_summary) & 2) { + LOG(memlog, "Memory still-in-use summary (pkg):\n"); + pkg_sums(); + } + } #endif #ifdef SHM_MEM - LOG(memlog, "Memory status (shm):\n"); - shm_status(); + if (memlog <= cfg_get(core, core_cfg, debug)){ + if (cfg_get(core, core_cfg, mem_summary) & 1) { + LOG(memlog, "Memory status (shm):\n"); + shm_status(); + } + if (cfg_get(core, core_cfg, mem_summary) & 2) { + LOG(memlog, "Memory still-in-use summary (shm):\n"); + shm_sums(); + } + } #endif break;
@@ -747,8 +771,17 @@ void sig_usr(int signo) LOG(L_INFO, "INFO: signal %d received\n", signo); /* print memory stats for non-main too */ #ifdef PKG_MALLOC - LOG(memlog, "Memory status (pkg):\n"); - pkg_status(); + if (memlog <= cfg_get(core, core_cfg, debug)){ + if (cfg_get(core, core_cfg, mem_summary) & 1) { + LOG(memlog, "Memory status (pkg):\n"); + pkg_status(); + } + if (cfg_get(core, core_cfg, mem_summary) & 2) { + LOG(memlog, "Memory still-in-use summary (pkg):" + "\n"); + pkg_sums(); + } + } #endif #endif _exit(0);