summaryrefslogtreecommitdiff
path: root/thread_sync.c
diff options
context:
space:
mode:
authorJean Boussier <jean.boussier@gmail.com>2022-08-04 10:37:46 +0200
committerJean Boussier <jean.boussier@gmail.com>2022-08-04 11:48:31 +0200
commit6b2fc33ae231594eb69f93c493e2c314931b0990 (patch)
tree60e88a37f11e5d939cf4ec4f668f5778a8a191cf /thread_sync.c
parent00f411c58ac6105f135ff4501ea5bd1d691fcc32 (diff)
thread_sync.c: pass proper argument to queue_sleep in rb_szqueue_push
When I removed the SizeQueue#push timeout from my PR, I forgot to update the `queue_sleep` parameters to be a `queue_sleep_arg`. Somehow this worked on most archs, but on Solaris/Sparc it would legitimately crash when trying to access the `timeout` and `end` members of the struct.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6213
Diffstat (limited to 'thread_sync.c')
-rw-r--r--thread_sync.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/thread_sync.c b/thread_sync.c
index 1a0f3ee855..0359ac2214 100644
--- a/thread_sync.c
+++ b/thread_sync.c
@@ -1277,7 +1277,13 @@ rb_szqueue_push(int argc, VALUE *argv, VALUE self)
ccan_list_add_tail(pushq, &queue_waiter.w.node);
sq->num_waiting_push++;
- rb_ensure(queue_sleep, self, szqueue_sleep_done, (VALUE)&queue_waiter);
+ struct queue_sleep_arg queue_sleep_arg = {
+ .self = self,
+ .timeout = Qnil,
+ .end = 0
+ };
+
+ rb_ensure(queue_sleep, (VALUE)&queue_sleep_arg, szqueue_sleep_done, (VALUE)&queue_waiter);
}
}