diff options
author | Richard Mudgett <rmudgett@digium.com> | 2018-02-27 15:40:18 -0600 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2018-02-28 11:41:30 -0600 |
commit | 1a36a452bd92eba702170ac2fe9bf2d83fbfaa98 (patch) | |
tree | 3ac4af64b514aa7b5ceaf27aa9267d79c183f066 /main | |
parent | 53ed437db3f37d941538ec1bf0ff96c422c7bef5 (diff) |
pjproject: Add cache_pools debugging option.
The pool cache gets in the way of finding use after free errors of memory
pool contents. Tools like valgrind and MALLOC_DEBUG don't know when a
pool is released because it gets put into the cache instead of being
freed.
* Added the "cache_pools" option to pjproject.conf. Disabling the option
helps track down pool content mismanagement when using valgrind or
MALLOC_DEBUG. The cache gets in the way of determining if the pool
contents are used after free and who freed it.
To disable the pool caching simply disable the cache_pools option in
pjproject.conf and restart Asterisk.
Sample pjproject.conf setting:
[startup]
cache_pools=no
* Made current users of the caching pool factory initialization and
destruction calls call common routines to create and destroy cached pools.
ASTERISK-27704
Change-Id: I64d5befbaeed2532f93aa027a51eb52347d2b828
Diffstat (limited to 'main')
-rw-r--r-- | main/asterisk.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/main/asterisk.c b/main/asterisk.c index 4c15d231f..e348b2199 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -331,6 +331,7 @@ int option_verbose; /*!< Verbosity level */ int option_debug; /*!< Debug level */ int ast_pjproject_max_log_level = -1;/* Default to -1 to know if we have read the level from pjproject yet. */ int ast_option_pjproject_log_level; +int ast_option_pjproject_cache_pools; double ast_option_maxload; /*!< Max load avg on system */ int ast_option_maxcalls; /*!< Max number of active calls */ int ast_option_maxfiles; /*!< Max number of open file handles (files, sockets) */ @@ -3744,6 +3745,7 @@ static void read_pjproject_startup_options(void) struct ast_flags config_flags = { CONFIG_FLAG_NOCACHE | CONFIG_FLAG_NOREALTIME }; ast_option_pjproject_log_level = DEFAULT_PJ_LOG_MAX_LEVEL; + ast_option_pjproject_cache_pools = DEFAULT_PJPROJECT_CACHE_POOLS; cfg = ast_config_load2("pjproject.conf", "" /* core, can't reload */, config_flags); if (!cfg @@ -3762,6 +3764,8 @@ static void read_pjproject_startup_options(void) } else if (MAX_PJ_LOG_MAX_LEVEL < ast_option_pjproject_log_level) { ast_option_pjproject_log_level = MAX_PJ_LOG_MAX_LEVEL; } + } else if (!strcasecmp(v->name, "cache_pools")) { + ast_option_pjproject_cache_pools = !ast_false(v->value); } } |