Commit 96de8fd377 for freeswitch.com

commit 96de8fd37734599d997bcb9fdd2b076d9cfb026e
Author: Aron Podrigal <aronp@guaranteedplus.com>
Date:   Thu Jan 16 10:13:31 2025 -0600

    [mod_timerfd] Fixed - continue timer loop after receiving a SIGSTOP

    When taking a snapshot of a machine which pauses the process, mod_timerfd exits and FreeSWITCH, causing all channels to wait indefinitely.

    Check `errno == EINTR` and continue the timer loop.

diff --git a/src/mod/timers/mod_timerfd/mod_timerfd.c b/src/mod/timers/mod_timerfd/mod_timerfd.c
index bd07be8cdd..641bfba9c5 100644
--- a/src/mod/timers/mod_timerfd/mod_timerfd.c
+++ b/src/mod/timers/mod_timerfd/mod_timerfd.c
@@ -31,6 +31,7 @@
  */

 #include <switch.h>
+#include <errno.h>
 #include <sys/timerfd.h>
 #include <sys/epoll.h>

@@ -228,8 +229,16 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_timerfd_runtime)

 	do {
 		r = epoll_wait(interval_poll_fd, e, sizeof(e) / sizeof(e[0]), 1000);
-		if (r < 0)
+		if (r < 0) {
+			/* if we had an interrupted system call due to process pause via SIGSTOP, do not exit the timer loop */
+			if (errno == EINTR) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "epoll_wait interrupted by SIGINT, continue...\n");
+				continue;
+			}
+
 			break;
+		}
+
 		for (i = 0; i < r; i++) {
 			it = e[i].data.ptr;
 			if ((e[i].events & EPOLLIN) &&