[前][次][番号順一覧][スレッド一覧]

ruby-changes:72522

From: Aaron <ko1@a...>
Date: Wed, 13 Jul 2022 08:07:56 +0900 (JST)
Subject: [ruby-changes:72522] de51bbcb54 (master): Use VM Lock when mutating waiting threads list

https://git.ruby-lang.org/ruby.git/commit/?id=de51bbcb54

From de51bbcb544651fb499dd4cc757a2bf6f3b439cf Mon Sep 17 00:00:00 2001
From: Aaron Patterson <tenderlove@r...>
Date: Mon, 11 Jul 2022 12:40:34 -0700
Subject: Use VM Lock when mutating waiting threads list

`rb_thread_wait_for_single_fd` needs to mutate the `waiting_fds` list
that is stored on the VM.  We need to delete the FD from the list before
returning, and deleting from the list requires a VM lock (because the
list is a global).

[Bug #18816] [ruby-core:108771]

Co-Authored-By: Alan Wu <alanwu@r...>
---
 thread.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/thread.c b/thread.c
index 5fd7a7f67a..7d1a4ee3fb 100644
--- a/thread.c
+++ b/thread.c
@@ -4342,7 +4342,11 @@ select_single_cleanup(VALUE ptr) https://github.com/ruby/ruby/blob/trunk/thread.c#L4342
 {
     struct select_args *args = (struct select_args *)ptr;
 
-    ccan_list_del(&args->wfd.wfd_node);
+    RB_VM_LOCK_ENTER();
+    {
+        ccan_list_del(&args->wfd.wfd_node);
+    }
+    RB_VM_LOCK_LEAVE();
     if (args->read) rb_fd_term(args->read);
     if (args->write) rb_fd_term(args->write);
     if (args->except) rb_fd_term(args->except);
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]