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)