summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-02-23 20:46:40 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-02-23 20:46:40 +0900
commit41eb4fbf86e7ae9c9ff993e07a19fa44eb74be9b (patch)
tree125a86a85739729faba587cc43e912075328135c
parentda18d6f0154f020733747c359b08d216db05c26a (diff)
Fixed commit miss at 19cc24b34b0490b7c2779eec521fe0089e05f183
-rw-r--r--win32/win32.c52
1 files changed, 22 insertions, 30 deletions
diff --git a/win32/win32.c b/win32/win32.c
index fc36f75e75..eccb7f495e 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -6591,36 +6591,32 @@ constat_handle(HANDLE h)
{
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)
{
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)