summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@coaxion.net>2023-04-26 06:29:43 +0000
committerSebastian Dröge <slomo@coaxion.net>2023-04-26 06:29:43 +0000
commit1df0e81b1997551d9fab597dce870f1b9056df72 (patch)
tree2b2a746b7544e75352fd8f70195f1020b6674861
parentc176fcf2eb3a20e989cd1c4439f76779f276f418 (diff)
parentedd1e47f107410d9e4edb691335410026ae5a534 (diff)
downloadglib-1df0e81b1997551d9fab597dce870f1b9056df72.tar.gz
Merge branch 'pkj/fix-g_futex_simple' into 'main'
Avoid having g_futex_simple() inadvertently modify errno See merge request GNOME/glib!3398
-rw-r--r--glib/gthreadprivate.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/glib/gthreadprivate.h b/glib/gthreadprivate.h
index 9c847e039..74d37ba32 100644
--- a/glib/gthreadprivate.h
+++ b/glib/gthreadprivate.h
@@ -65,9 +65,13 @@ struct _GRealThread
#define g_futex_simple(uaddr, futex_op, ...) \
G_STMT_START \
{ \
+ int saved_errno = errno; \
int res = syscall (__NR_futex_time64, uaddr, (gsize) futex_op, __VA_ARGS__); \
if (res < 0 && errno == ENOSYS) \
- syscall (__NR_futex, uaddr, (gsize) futex_op, __VA_ARGS__); \
+ { \
+ errno = saved_errno; \
+ syscall (__NR_futex, uaddr, (gsize) futex_op, __VA_ARGS__); \
+ } \
} \
G_STMT_END
#elif defined(__NR_futex_time64)