Expose res_pjsip threadpool options

Expose initial size, automatic increment, maximum size, and idle
timeout as configurable parameters for the res_pjsip thread pool.

Review: https://reviewboard.asterisk.org/r/2704/
(closes issue ASTERISK-22143)


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@396321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Kinsey Moore
2013-08-06 13:08:13 +00:00
parent 2e23bec461
commit dfa5be76d4
3 changed files with 85 additions and 18 deletions

View File

@@ -935,6 +935,19 @@
<configOption name="compactheaders" default="no">
<synopsis>Use the short forms of common SIP header names.</synopsis>
</configOption>
<configOption name="threadpool_initial_size" default="0">
<synopsis>Initial number of threads in the res_pjsip threadpool.</synopsis>
</configOption>
<configOption name="threadpool_auto_increment" default="5">
<synopsis>The amount by which the number of threads is incremented when necessary.</synopsis>
</configOption>
<configOption name="threadpool_idle_timeout" default="60">
<synopsis>Number of seconds before an idle thread should be disposed of.</synopsis>
</configOption>
<configOption name="threadpool_max_size" default="0">
<synopsis>Maximum number of threads in the res_pjsip threadpool.
A value of 0 indicates no maximum.</synopsis>
</configOption>
</configObject>
<configObject name="global">
<synopsis>Options that apply globally to all SIP communications</synopsis>
@@ -1760,26 +1773,12 @@ static void remove_request_headers(pjsip_endpoint *endpt)
static int load_module(void)
{
/* The third parameter is just copied from
* example code from PJLIB. This can be adjusted
* if necessary.
/* The third parameter is just copied from
* example code from PJLIB. This can be adjusted
* if necessary.
*/
pj_status_t status;
/* XXX For the time being, create hard-coded threadpool
* options. Just bump up by five threads every time we
* don't have any available threads. Idle threads time
* out after a minute. No maximum size
*/
struct ast_threadpool_options options = {
.version = AST_THREADPOOL_OPTIONS_VERSION,
.auto_increment = 5,
.max_size = 0,
.idle_timeout = 60,
.initial_size = 0,
.thread_start = sip_thread_start,
};
sip_threadpool = ast_threadpool_create("SIP", NULL, &options);
struct ast_threadpool_options options;
if (pj_init() != PJ_SUCCESS) {
return AST_MODULE_LOAD_DECLINE;
@@ -1812,6 +1811,14 @@ static int load_module(void)
goto error;
}
sip_get_threadpool_options(&options);
options.thread_start = sip_thread_start;
sip_threadpool = ast_threadpool_create("SIP", NULL, &options);
if (!sip_threadpool) {
ast_log(LOG_ERROR, "Failed to create SIP threadpool. Aborting load\n");
goto error;
}
pjsip_tsx_layer_init_module(ast_pjsip_endpoint);
pjsip_ua_init_module(ast_pjsip_endpoint, NULL);