aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstddjb
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-05-17 22:53:01 +0000
committerLaurent Bercot <ska@appnovation.com>2025-05-17 22:53:01 +0000
commit0166e83ac731a0c5803db22471a2c936b0567a64 (patch)
tree05a3ed93771fc83c72351ee78698f4b07701a36e /src/libstddjb
parentf40d8d198eea1d91f092c09ee738f751ada741bc (diff)
downloadskalibs-0166e83ac731a0c5803db22471a2c936b0567a64.tar.gz
Clamp setitimer to 1e8 seconds because MacOS
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libstddjb')
-rw-r--r--src/libstddjb/alarm_milliseconds.c8
-rw-r--r--src/libstddjb/alarm_timeout.c10
2 files changed, 15 insertions, 3 deletions
diff --git a/src/libstddjb/alarm_milliseconds.c b/src/libstddjb/alarm_milliseconds.c
index 0628518..c541f8e 100644
--- a/src/libstddjb/alarm_milliseconds.c
+++ b/src/libstddjb/alarm_milliseconds.c
@@ -36,11 +36,17 @@ int alarm_milliseconds (unsigned int t)
#ifdef SKALIBS_HASITIMER
#include <sys/time.h>
+#include <errno.h>
int alarm_milliseconds (unsigned int t)
{
struct itimerval it = { .it_interval = { .tv_sec = 0, .tv_usec = 0 }, .it_value = { .tv_sec = t / 1000, .tv_usec = 1000 * (t % 1000) } } ;
- if (setitimer(ITIMER_REAL, &it, 0) < 0) return 0 ;
+ if (setitimer(ITIMER_REAL, &it, 0) < 0)
+ {
+ if (errno != EINVAL) return 0 ;
+ it.it_Value.tv_sec = 9999999 ;
+ if (setitimer(ITIMER_REAL, &it, 0) < 0) return 0 ;
+ }
return 1 ;
}
diff --git a/src/libstddjb/alarm_timeout.c b/src/libstddjb/alarm_timeout.c
index 8ce5d3d..f887121 100644
--- a/src/libstddjb/alarm_timeout.c
+++ b/src/libstddjb/alarm_timeout.c
@@ -42,8 +42,9 @@ int alarm_timeout (tain const *tto)
#else
#ifdef SKALIBS_HASITIMER
-#include <limits.h>
#include <sys/time.h>
+#include <errno.h>
+#include <limits.h>
int alarm_timeout (tain const *tto)
{
@@ -53,7 +54,12 @@ int alarm_timeout (tain const *tto)
it.it_value.tv_sec = INT_MAX ;
it.it_value.tv_usec = 0 ;
}
- if (setitimer(ITIMER_REAL, &it, 0) < 0) return 0 ;
+ if (setitimer(ITIMER_REAL, &it, 0) < 0)
+ {
+ if (errno != EINVAL) return 0 ;
+ it.it_Value.tv_sec = 9999999 ;
+ if (setitimer(ITIMER_REAL, &it, 0) < 0) return 0 ;
+ }
return 1 ;
}