diff options
author | Jenkins2 <jenkins2@gerrit.asterisk.org> | 2018-04-16 07:11:26 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2018-04-16 07:11:26 -0500 |
commit | 267e007c28663690e8ad48487be2f4a7ec78e926 (patch) | |
tree | e132478ada697be88cbd5657647a3667738bed16 | |
parent | 1f6fc78a2e424ee1ba21e0f2cb27f1f79c243e2b (diff) | |
parent | 3bb6cf43b58ee04def658632c46d3a2177845fb4 (diff) |
Merge "pjsip_scheduler.c: Add ability to trace scheduled tasks."
-rw-r--r-- | include/asterisk/res_pjsip.h | 15 | ||||
-rw-r--r-- | res/res_pjsip/pjsip_scheduler.c | 21 |
2 files changed, 32 insertions, 4 deletions
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h index b01d6f5d0..f06aec4be 100644 --- a/include/asterisk/res_pjsip.h +++ b/include/asterisk/res_pjsip.h @@ -1620,16 +1620,23 @@ enum ast_sip_scheduler_task_flags { */ AST_SIP_SCHED_TASK_DATA_FREE = ( 1 << 3 ), - /*! \brief AST_SIP_SCHED_TASK_PERIODIC - * The task is scheduled at multiples of interval + /*! + * \brief The task is scheduled at multiples of interval * \see Interval */ AST_SIP_SCHED_TASK_PERIODIC = (0 << 4), - /*! \brief AST_SIP_SCHED_TASK_DELAY - * The next invocation of the task is at last finish + interval + /*! + * \brief The next invocation of the task is at last finish + interval * \see Interval */ AST_SIP_SCHED_TASK_DELAY = (1 << 4), + /*! + * \brief The scheduled task's events are tracked in the debug log. + * \details + * Schedule events such as scheduling, running, rescheduling, canceling, + * and destroying are logged about the task. + */ + AST_SIP_SCHED_TASK_TRACK = (1 << 5), }; /*! diff --git a/res/res_pjsip/pjsip_scheduler.c b/res/res_pjsip/pjsip_scheduler.c index 2b072b67e..bbf666fd7 100644 --- a/res/res_pjsip/pjsip_scheduler.c +++ b/res/res_pjsip/pjsip_scheduler.c @@ -86,6 +86,9 @@ static int run_task(void *data) return -1; } + if (schtd->flags & AST_SIP_SCHED_TASK_TRACK) { + ast_log(LOG_DEBUG, "Sched %p: Running %s\n", schtd, schtd->name); + } ao2_lock(schtd); schtd->last_start = ast_tvnow(); schtd->is_running = 1; @@ -137,6 +140,10 @@ static int run_task(void *data) } ao2_unlock(schtd); + if (schtd->flags & AST_SIP_SCHED_TASK_TRACK) { + ast_log(LOG_DEBUG, "Sched %p: Rescheduled %s for %d ms\n", schtd, schtd->name, + delay); + } return 0; } @@ -159,6 +166,9 @@ static int push_to_serializer(const void *data) return 0; } + if (schtd->flags & AST_SIP_SCHED_TASK_TRACK) { + ast_log(LOG_DEBUG, "Sched %p: Ready to run %s\n", schtd, schtd->name); + } ao2_t_ref(schtd, +1, "Give ref to run_task()"); if (ast_sip_push_task(schtd->serializer, run_task, schtd)) { /* @@ -181,6 +191,10 @@ int ast_sip_sched_task_cancel(struct ast_sip_sched_task *schtd) int res; int sched_id; + if (schtd->flags & AST_SIP_SCHED_TASK_TRACK) { + ast_log(LOG_DEBUG, "Sched %p: Canceling %s\n", schtd, schtd->name); + } + /* * Prevent any tasks in the serializer queue from * running and restarting the scheduled item on us @@ -347,6 +361,9 @@ static void schtd_dtor(void *data) { struct ast_sip_sched_task *schtd = data; + if (schtd->flags & AST_SIP_SCHED_TASK_TRACK) { + ast_log(LOG_DEBUG, "Sched %p: Destructor %s\n", schtd, schtd->name); + } if (schtd->flags & AST_SIP_SCHED_TASK_DATA_AO2) { /* release our own ref, then release the callers if asked to do so */ ao2_ref(schtd->task_data, (schtd->flags & AST_SIP_SCHED_TASK_DATA_FREE) ? -2 : -1); @@ -387,6 +404,10 @@ struct ast_sip_sched_task *ast_sip_schedule_task(struct ast_taskprocessor *seria task_id = ast_atomic_fetchadd_int(&task_count, 1); sprintf(schtd->name, "task_%08x", task_id); } + if (schtd->flags & AST_SIP_SCHED_TASK_TRACK) { + ast_log(LOG_DEBUG, "Sched %p: Scheduling %s for %d ms\n", schtd, schtd->name, + interval); + } schtd->when_queued = ast_tvnow(); if (!(schtd->flags & AST_SIP_SCHED_TASK_DELAY)) { schtd->next_periodic = ast_tvadd(schtd->when_queued, |