diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-02-23 21:23:46 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-02-23 21:23:46 +0900 |
commit | 819dd464dee2245299cb62323fe5c2b42940879e (patch) | |
tree | ee42d2a0db063ef6a1f5a1354d99bbdf5a9fa6d0 /win32 | |
parent | 5a4742a0b4d57e95d6ed7e27c786a74e7cb55977 (diff) |
Fixed commit miss at 41eb4fbf86e7ae9c9ff993e07a19fa44eb74be9b
Diffstat (limited to 'win32')
-rw-r--r-- | win32/win32.c | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/win32/win32.c b/win32/win32.c index 0dc29f209f..bb7471fbaf 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -6599,32 +6599,34 @@ static struct constat * constat_handle(HANDLE h) { st_data_t data; - struct constat *p; - if (!conlist) { - if (console_emulator_p()) { - conlist = conlist_disabled; - return NULL; + struct constat *p = NULL; + thread_exclusive(conlist) { + if (!conlist) { + if (console_emulator_p()) { + conlist = conlist_disabled; + continue; + } + conlist = st_init_numtable(); + install_vm_exit_handler(); } - conlist = st_init_numtable(); - install_vm_exit_handler(); - } - 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 if (conlist == conlist_disabled) { + continue; + } + 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); } - st_insert(conlist, (st_data_t)h, (st_data_t)p); } return p; } |