From cb587626ea8b9742df19169ec40a8d48a627071a Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 7 Feb 2007 19:18:15 +0000 Subject: [PATCH] timer mojo (cont) git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4151 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_core.h | 3 +- src/include/switch_module_interfaces.h | 2 +- src/mod/timers/mod_softtimer/mod_softtimer.c | 29 ++++++-------------- src/switch_core.c | 4 +-- src/switch_rtp.c | 5 ++-- 5 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/include/switch_core.h b/src/include/switch_core.h index da673465ac..826b88ebd1 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -905,10 +905,9 @@ SWITCH_DECLARE(switch_status_t) switch_core_timer_step(switch_timer_t *timer); /*! \brief Check if the current step has been exceeded \param timer the timer to wait on - \param diff the remaining number of ms \return the newest sample count */ -SWITCH_DECLARE(switch_status_t) switch_core_timer_check(switch_timer_t *timer, uint32_t *diff); +SWITCH_DECLARE(switch_status_t) switch_core_timer_check(switch_timer_t *timer); /*! \brief Destroy an allocated timer diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_interfaces.h index 37bc6497eb..e8abf5efcf 100644 --- a/src/include/switch_module_interfaces.h +++ b/src/include/switch_module_interfaces.h @@ -245,7 +245,7 @@ struct switch_timer_interface { /*! function to step the timer one step */ switch_status_t (*timer_step)(switch_timer_t *); /*! function to check if the current step has expired */ - switch_status_t (*timer_check)(switch_timer_t *, uint32_t *); + switch_status_t (*timer_check)(switch_timer_t *); /*! function to deallocate the timer */ switch_status_t (*timer_destroy)(switch_timer_t *); const struct switch_timer_interface *next; diff --git a/src/mod/timers/mod_softtimer/mod_softtimer.c b/src/mod/timers/mod_softtimer/mod_softtimer.c index 10f6bb0741..14e238ff86 100644 --- a/src/mod/timers/mod_softtimer/mod_softtimer.c +++ b/src/mod/timers/mod_softtimer/mod_softtimer.c @@ -78,11 +78,8 @@ static inline switch_status_t timer_step(switch_timer_t *timer) { timer_private_t *private_info = timer->private_info; - while(private_info->reference <= TIMER_MATRIX[timer->interval].tick) { - private_info->reference += timer->interval; - } - - return SWITCH_STATUS_SUCCESS; + private_info->reference += timer->interval; + return SWITCH_STATUS_SUCCESS; } @@ -93,41 +90,31 @@ static inline switch_status_t timer_next(switch_timer_t *timer) timer_step(timer); while (TIMER_MATRIX[timer->interval].tick < private_info->reference) { uint64_t diff; - - if ((diff = (private_info->reference - TIMER_MATRIX[timer->interval].tick))) { - if (diff == timer->interval) { - switch_yield(diff * 500); - } else { - switch_yield(1000); - } - } else { - break; - } + switch_yield(timer->interval * 500); } timer->samplecount += timer->samples; return SWITCH_STATUS_SUCCESS; } -static inline switch_status_t timer_check(switch_timer_t *timer, uint32_t *diff) +static inline switch_status_t timer_check(switch_timer_t *timer) { timer_private_t *private_info = timer->private_info; switch_status_t status = SWITCH_STATUS_SUCCESS; + uint64_t diff; if (TIMER_MATRIX[timer->interval].tick < private_info->reference) { - uint64_t _diff = private_info->reference - TIMER_MATRIX[timer->interval].tick; - *diff = (uint32_t) _diff; + diff = private_info->reference - TIMER_MATRIX[timer->interval].tick; } else { - *diff = 0; + diff = 0; } - if (*diff) { + if (diff) { status = SWITCH_STATUS_FALSE; } else { timer_step(timer); } - return status; } diff --git a/src/switch_core.c b/src/switch_core.c index 96661f977c..19e8b6debd 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1321,14 +1321,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_timer_step(switch_timer_t *timer) return timer->timer_interface->timer_step(timer); } -SWITCH_DECLARE(switch_status_t) switch_core_timer_check(switch_timer_t *timer, uint32_t *diff) +SWITCH_DECLARE(switch_status_t) switch_core_timer_check(switch_timer_t *timer) { if (!timer->timer_interface) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Timer is not initilized!\n"); return SWITCH_STATUS_GENERR; } - return timer->timer_interface->timer_check(timer, diff); + return timer->timer_interface->timer_check(timer); } diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 81a14f0b6f..23496bb8ab 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -711,7 +711,6 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ switch_size_t bytes = 0; switch_status_t status; uint8_t check = 1; - uint32_t diff = 0; if (!rtp_session->timer.interval) { rtp_session->last_time = switch_time_now(); @@ -758,7 +757,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ } if (rtp_session->timer.interval) { - check = (uint8_t)(switch_core_timer_check(&rtp_session->timer, &diff) == SWITCH_STATUS_SUCCESS); + check = (uint8_t)(switch_core_timer_check(&rtp_session->timer) == SWITCH_STATUS_SUCCESS); } if (check) { @@ -781,7 +780,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ if (status == SWITCH_STATUS_BREAK || bytes == 0) { if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_DATAWAIT)) { - switch_yield(diff * 500); + switch_yield((rtp_session->ms_per_packet / 1000) * 750); continue; } return 0;