summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--variable.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/variable.c b/variable.c
index dda92cd723..b74bb7ef90 100644
--- a/variable.c
+++ b/variable.c
@@ -1847,8 +1847,7 @@ struct autoload_state {
VALUE result;
ID id;
VALUE thread;
- struct list_node node;
- struct list_head head;
+ struct list_node waitq;
};
struct autoload_data_i {
@@ -2101,11 +2100,11 @@ autoload_reset(VALUE arg)
if (need_wakeups) {
struct autoload_state *cur = 0, *nxt;
- list_for_each_safe(&state->head, cur, nxt, node) {
+ list_for_each_safe((struct list_head *)&state->waitq, cur, nxt, waitq) {
VALUE th = cur->thread;
cur->thread = Qfalse;
- list_del_init(&cur->node); /* idempotent */
+ list_del_init(&cur->waitq); /* idempotent */
/*
* cur is stored on the stack of cur->waiting_th,
@@ -2140,7 +2139,7 @@ autoload_sleep_done(VALUE arg)
struct autoload_state *state = (struct autoload_state *)arg;
if (state->thread != Qfalse && rb_thread_to_be_killed(state->thread)) {
- list_del(&state->node); /* idempotent after list_del_init */
+ list_del(&state->waitq); /* idempotent after list_del_init */
}
return Qfalse;
@@ -2176,13 +2175,13 @@ rb_autoload_load(VALUE mod, ID id)
* autoload_reset will wake up any threads added to this
* iff the GVL is released during autoload_require
*/
- list_head_init(&state.head);
+ list_head_init((struct list_head *)&state.waitq);
}
else if (state.thread == ele->state->thread) {
return Qfalse;
}
else {
- list_add_tail(&ele->state->head, &state.node);
+ list_add_tail((struct list_head *)&ele->state->waitq, &state.waitq);
rb_ensure(autoload_sleep, (VALUE)&state,
autoload_sleep_done, (VALUE)&state);