From: Walter Doekes Date: Thu, 2 Jul 2015 09:57:44 +0000 (+0200) Subject: res_timing: Don't close FD 0 when out of open files. X-Git-Tag: 13.5.0-rc1~61^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fchanges%2F60%2F760%2F1;p=thirdparty%2Fasterisk.git res_timing: Don't close FD 0 when out of open files. This fixes so a failure to get a timer file descriptor does not cascade to closing FD 0. On error, both res_timing_kqueue and res_timing_timerfd would call the destructor before setting the file handle. The file handle had been initialized to 0, causing FD 0 to be closed. This in turn, resulted in floods of "CLI>" messages and an unusable terminal. ASTERISK-19277 #close Reported by: Barry Chern For the 13 branch, this was already fixed. This patch only ensures that we do not attempt to close a negative file descriptor. Change-Id: I147d7e33726c6e5a2751928d56561494f5800350 --- diff --git a/res/res_timing_kqueue.c b/res/res_timing_kqueue.c index 17f98360ee..d46f7f3d62 100644 --- a/res/res_timing_kqueue.c +++ b/res/res_timing_kqueue.c @@ -159,7 +159,9 @@ static void timer_destroy(void *obj) struct kqueue_timer *timer = obj; ast_debug(5, "[%d]: Timer Destroy\n", timer->handle); kqueue_timer_fini_continuous_event(timer); - close(timer->handle); + if (timer->handle > -1) { + close(timer->handle); + } } static void *kqueue_timer_open(void) diff --git a/res/res_timing_timerfd.c b/res/res_timing_timerfd.c index 6d5400bc3c..43deb6ce7e 100644 --- a/res/res_timing_timerfd.c +++ b/res/res_timing_timerfd.c @@ -76,8 +76,9 @@ struct timerfd_timer { static void timer_destroy(void *obj) { struct timerfd_timer *timer = obj; - - close(timer->fd); + if (timer->fd > -1) { + close(timer->fd); + } } static void *timerfd_timer_open(void)