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

ruby-changes:65326

From: Nobuyoshi <ko1@a...>
Date: Tue, 23 Feb 2021 20:49:29 +0900 (JST)
Subject: [ruby-changes:65326] 41eb4fbf86 (master): Fixed commit miss at 19cc24b34b0490b7c2779eec521fe0089e05f183

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

From 41eb4fbf86e7ae9c9ff993e07a19fa44eb74be9b Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Tue, 23 Feb 2021 20:46:40 +0900
Subject: Fixed commit miss at 19cc24b34b0490b7c2779eec521fe0089e05f183

---
 win32/win32.c | 52 ++++++++++++++++++++++------------------------------
 1 file changed, 22 insertions(+), 30 deletions(-)

diff --git a/win32/win32.c b/win32/win32.c
index fc36f75..eccb7f4 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -6591,36 +6591,32 @@ constat_handle(HANDLE h) https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L6591
 {
     st_data_t data;
     struct constat *p;
-
-    EnterCriticalSection(&conlist_mutex);
     if (!conlist) {
 	if (console_emulator_p()) {
 	    conlist = conlist_disabled;
-	} else {
-	    conlist = st_init_numtable();
-	    install_vm_exit_handler();
+	    return NULL;
 	}
+	conlist = st_init_numtable();
+	install_vm_exit_handler();
     }
-    if (conlist != conlist_disabled) {
-	if (st_lookup(conlist, (st_data_t)h, &data)) {
-	    p = (struct constat *)data;
-	} else {
-	    CONSOLE_SCREEN_BUFFER_INFO csbi;
-	    p = ALLOC(struct constat);
-	    p->vt100.state = constat_init;
-	    p->vt100.attr = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
-	    p->vt100.reverse = 0;
-	    p->vt100.saved.X = p->vt100.saved.Y = 0;
-	    if (GetConsoleScreenBufferInfo(h, &csbi)) {
-		p->vt100.attr = csbi.wAttributes;
-	    }
-	    st_insert(conlist, (st_data_t)h, (st_data_t)p);
+    else if (conlist == conlist_disabled) {
+	return NULL;
+    }
+    if (st_lookup(conlist, (st_data_t)h, &data)) {
+	p = (struct constat *)data;
+    }
+    else {
+	CONSOLE_SCREEN_BUFFER_INFO csbi;
+	p = ALLOC(struct constat);
+	p->vt100.state = constat_init;
+	p->vt100.attr = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
+	p->vt100.reverse = 0;
+	p->vt100.saved.X = p->vt100.saved.Y = 0;
+	if (GetConsoleScreenBufferInfo(h, &csbi)) {
+	    p->vt100.attr = csbi.wAttributes;
 	}
-    } else {
-	p = NULL;
+	st_insert(conlist, (st_data_t)h, (st_data_t)p);
     }
-    LeaveCriticalSection(&conlist_mutex);
-
     return p;
 }
 
@@ -6630,16 +6626,12 @@ constat_reset(HANDLE h) https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L6626
 {
     st_data_t data;
     struct constat *p;
-
-    EnterCriticalSection(&conlist_mutex);
-    if (
-	conlist && conlist != conlist_disabled &&
-	st_lookup(conlist, (st_data_t)h, &data)
-    ) {
+    thread_exclusive(conlist) {
+	if (!conlist || conlist == conlist_disabled) continue;
+	if (!st_lookup(conlist, (st_data_t)h, &data)) continue;
 	p = (struct constat *)data;
 	p->vt100.state = constat_init;
     }
-    LeaveCriticalSection(&conlist_mutex);
 }
 
 #define FOREGROUND_MASK (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY)
-- 
cgit v1.1


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

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