1
0
mirror of https://gitlab.gnome.org/GNOME/glib.git synced 2025-07-22 18:07:54 +02:00

Merge branch 'backport-3624-wakeup-eintr-glib-2-78' into 'glib-2-78'

Backport  “wakeup: Fix g_wakeup_acknowledge if signal comes in” to glib-2-78

See merge request 
This commit is contained in:
Michael Catanzaro
2023-10-05 17:57:11 +00:00

@@ -207,20 +207,25 @@ g_wakeup_get_pollfd (GWakeup *wakeup,
void void
g_wakeup_acknowledge (GWakeup *wakeup) g_wakeup_acknowledge (GWakeup *wakeup)
{ {
/* read until it is empty */ int res;
if (wakeup->fds[1] == -1) if (wakeup->fds[1] == -1)
{ {
uint64_t value; uint64_t value;
/* eventfd() read resets counter */ /* eventfd() read resets counter */
read (wakeup->fds[0], &value, sizeof (value)); do
res = read (wakeup->fds[0], &value, sizeof (value));
while (G_UNLIKELY (res == -1 && errno == EINTR));
} }
else else
{ {
uint8_t value; uint8_t value;
while (read (wakeup->fds[0], &value, sizeof (value)) == sizeof (value)); /* read until it is empty */
do
res = read (wakeup->fds[0], &value, sizeof (value));
while (res == sizeof (value) || G_UNLIKELY (res == -1 && errno == EINTR));
} }
} }