summaryrefslogtreecommitdiff
path: root/win32/win32.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-02-23 21:23:46 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-02-23 21:23:46 +0900
commit819dd464dee2245299cb62323fe5c2b42940879e (patch)
treeee42d2a0db063ef6a1f5a1354d99bbdf5a9fa6d0 /win32/win32.c
parent5a4742a0b4d57e95d6ed7e27c786a74e7cb55977 (diff)
Fixed commit miss at 41eb4fbf86e7ae9c9ff993e07a19fa44eb74be9b
Diffstat (limited to 'win32/win32.c')
-rw-r--r--win32/win32.c50
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;
}