diff options
author | Sebastian Dröge <slomo@coaxion.net> | 2023-04-26 06:29:43 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@coaxion.net> | 2023-04-26 06:29:43 +0000 |
commit | 1df0e81b1997551d9fab597dce870f1b9056df72 (patch) | |
tree | 2b2a746b7544e75352fd8f70195f1020b6674861 /glib/gthreadprivate.h | |
parent | c176fcf2eb3a20e989cd1c4439f76779f276f418 (diff) | |
parent | edd1e47f107410d9e4edb691335410026ae5a534 (diff) | |
download | glib-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
Diffstat (limited to 'glib/gthreadprivate.h')
-rw-r--r-- | glib/gthreadprivate.h | 6 |
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) |