res_timing: Don't close FD 0 when out of open files.
authorWalter Doekes <walter+asterisk@wjd.nu>
Thu, 2 Jul 2015 09:57:44 +0000 (11:57 +0200)
committerWalter Doekes <walter+asterisk@wjd.nu>
Thu, 2 Jul 2015 10:13:37 +0000 (05:13 -0500)
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 master branch, this was already fixed. This patch only ensures
that we do not attempt to close a negative file descriptor.

Change-Id: I147d7e33726c6e5a2751928d56561494f5800350

res/res_timing_kqueue.c
res/res_timing_timerfd.c

index dd2a839..f568144 100644 (file)
@@ -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)
index 5ee21fc..71f74bb 100644 (file)
@@ -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)