summaryrefslogtreecommitdiff
path: root/res/res_pjproject.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2018-02-27 15:40:18 -0600
committerRichard Mudgett <rmudgett@digium.com>2018-02-28 11:41:30 -0600
commit1a36a452bd92eba702170ac2fe9bf2d83fbfaa98 (patch)
tree3ac4af64b514aa7b5ceaf27aa9267d79c183f066 /res/res_pjproject.c
parent53ed437db3f37d941538ec1bf0ff96c422c7bef5 (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 'res/res_pjproject.c')
-rw-r--r--res/res_pjproject.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/res/res_pjproject.c b/res/res_pjproject.c
index f506a62fd..ebd71b99b 100644
--- a/res/res_pjproject.c
+++ b/res/res_pjproject.c
@@ -459,6 +459,18 @@ static struct ast_cli_entry pjproject_cli[] = {
AST_CLI_DEFINE(handle_pjproject_show_log_level, "Show the maximum active pjproject logging level"),
};
+void ast_pjproject_caching_pool_init(pj_caching_pool *cp,
+ const pj_pool_factory_policy *policy, pj_size_t max_capacity)
+{
+ /* Passing a max_capacity of zero disables caching pools */
+ pj_caching_pool_init(cp, policy, ast_option_pjproject_cache_pools ? max_capacity : 0);
+}
+
+void ast_pjproject_caching_pool_destroy(pj_caching_pool *cp)
+{
+ pj_caching_pool_destroy(cp);
+}
+
static int load_module(void)
{
ast_debug(3, "Starting PJPROJECT logging to Asterisk logger\n");