Merge pull request #1797 in FS/freeswitch from bugfix/FS-11981-freeswitch-crash-any-time-in-switch_timer.c-when-high-throughput to master

* commit '48b8fa5864548322944bdcdad0671ffbdc32cffb':
  FS-11981: [Core] Fix FreeSWITCH crash when timerfd is initialized with an error.
This commit is contained in:
Mike Jerris 2019-08-19 12:37:15 -05:00
commit 8f4b522293
1 changed files with 13 additions and 2 deletions

View File

@ -479,6 +479,10 @@ static switch_status_t _timerfd_next(switch_timer_t *timer)
interval_timer_t *it = timer->private_info;
uint64_t u64 = 0;
if (!it) {
return SWITCH_STATUS_GENERR;
}
if (read(it->fd, &u64, sizeof(u64)) < 0) {
return SWITCH_STATUS_GENERR;
} else {
@ -495,6 +499,10 @@ static switch_status_t _timerfd_check(switch_timer_t *timer, switch_bool_t step)
struct itimerspec val;
int diff;
if (!it) {
return SWITCH_STATUS_GENERR;
}
timerfd_gettime(it->fd, &val);
diff = val.it_interval.tv_nsec / 1000;
@ -515,9 +523,12 @@ static switch_status_t _timerfd_check(switch_timer_t *timer, switch_bool_t step)
static switch_status_t _timerfd_destroy(switch_timer_t *timer)
{
interval_timer_t *it = timer->private_info;
int rc;
int rc = SWITCH_STATUS_GENERR;
if (it) {
rc = timerfd_stop_interval(it);
}
rc = timerfd_stop_interval(it);
return rc;
}