Coverage Report

Created: 2025-12-11 07:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/dovecot/src/lib/sleep.c
Line
Count
Source
1
/* Copyright (c) 2018 Dovecot authors, see the included COPYING file */
2
3
#include "lib.h"
4
#include "sleep.h"
5
6
#include <time.h>
7
8
static bool ATTR_NOWARN_UNUSED_RESULT
9
sleep_timespec(const struct timespec *ts_sleep, bool interruptible)
10
3.65k
{
11
3.65k
  struct timespec ts_remain = *ts_sleep;
12
13
3.65k
  while (nanosleep(&ts_remain, &ts_remain) < 0) {
14
0
    if (errno != EINTR)
15
0
      i_fatal("nanosleep(): %m");
16
0
    if (interruptible)
17
0
      return FALSE;
18
0
  }
19
3.65k
  return TRUE;
20
3.65k
}
21
22
void i_sleep_usecs(unsigned long long usecs)
23
0
{
24
0
  struct timespec ts_sleep;
25
26
0
  ts_sleep.tv_sec = (time_t)(usecs / 1000000);
27
0
  ts_sleep.tv_nsec = (long)(usecs % 1000000) * 1000;
28
0
  sleep_timespec(&ts_sleep, FALSE);
29
0
}
30
31
void i_sleep_msecs(unsigned int msecs)
32
0
{
33
0
  struct timespec ts_sleep;
34
35
0
  ts_sleep.tv_sec = (time_t)(msecs / 1000);
36
0
  ts_sleep.tv_nsec = (long)(msecs % 1000) * 1000000;
37
0
  sleep_timespec(&ts_sleep, FALSE);
38
0
}
39
40
void i_sleep_secs(time_t secs)
41
0
{
42
0
  struct timespec ts_sleep;
43
44
0
  ts_sleep.tv_sec = secs;
45
0
  ts_sleep.tv_nsec = 0;
46
0
  sleep_timespec(&ts_sleep, FALSE);
47
0
}
48
49
bool i_sleep_intr_usecs(unsigned long long usecs)
50
0
{
51
0
  struct timespec ts_sleep;
52
53
0
  ts_sleep.tv_sec = (time_t)(usecs / 1000000);
54
0
  ts_sleep.tv_nsec = (long)(usecs % 1000000) * 1000;
55
0
  return sleep_timespec(&ts_sleep, TRUE);
56
0
}
57
58
bool i_sleep_intr_msecs(unsigned int msecs)
59
3.65k
{
60
3.65k
  struct timespec ts_sleep;
61
62
3.65k
  ts_sleep.tv_sec = (time_t)(msecs / 1000);
63
3.65k
  ts_sleep.tv_nsec = (long)(msecs % 1000) * 1000000;
64
3.65k
  return sleep_timespec(&ts_sleep, TRUE);
65
3.65k
}
66
67
bool i_sleep_intr_secs(time_t secs)
68
0
{
69
0
  struct timespec ts_sleep;
70
71
0
  ts_sleep.tv_sec = secs;
72
0
  ts_sleep.tv_nsec = 0;
73
0
  return sleep_timespec(&ts_sleep, TRUE);
74
0
}