[KERNEL32/CONSRV]

- Use a standard win32 thread function for the ConsoleControlDispatcher thread, instead of a custom PCONTROLDISPATCHER one.
- Deactivate debug outputs in console.c, which were activated by error in r57706.

svn path=/branches/ros-csrss/; revision=57714
This commit is contained in:
Hermès Bélusca-Maïto 2012-11-15 23:06:49 +00:00
parent 0473031b87
commit 903d3cfb1c
2 changed files with 19 additions and 24 deletions

View file

@ -15,7 +15,7 @@
#include <k32.h> #include <k32.h>
// #define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
extern RTL_CRITICAL_SECTION ConsoleLock; extern RTL_CRITICAL_SECTION ConsoleLock;
@ -66,16 +66,16 @@ DefaultConsoleCtrlHandler(DWORD Event)
return TRUE; return TRUE;
} }
__declspec(noreturn) DWORD
VOID WINAPI
CALLBACK ConsoleControlDispatcher(IN LPVOID lpThreadParameter)
ConsoleControlDispatcher(DWORD CodeAndFlag)
{ {
DWORD nExitCode = 0; DWORD nExitCode = 0;
DWORD CodeAndFlag = PtrToUlong(lpThreadParameter);
DWORD nCode = CodeAndFlag & MAXLONG; DWORD nCode = CodeAndFlag & MAXLONG;
UINT i; UINT i;
EXCEPTION_RECORD erException; EXCEPTION_RECORD erException;
DPRINT("Console Dispatcher Active: %lx %lx\n", CodeAndFlag, nCode); DPRINT("Console Dispatcher Active: %lx %lx\n", CodeAndFlag, nCode);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
@ -92,7 +92,7 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
erException.ExceptionRecord = NULL; erException.ExceptionRecord = NULL;
erException.ExceptionAddress = DefaultConsoleCtrlHandler; erException.ExceptionAddress = DefaultConsoleCtrlHandler;
erException.NumberParameters = 0; erException.NumberParameters = 0;
_SEH2_TRY _SEH2_TRY
{ {
RtlRaiseException(&erException); RtlRaiseException(&erException);
@ -100,7 +100,7 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{ {
RtlEnterCriticalSection(&ConsoleLock); RtlEnterCriticalSection(&ConsoleLock);
if ((nCode != CTRL_C_EVENT) || if ((nCode != CTRL_C_EVENT) ||
(NtCurrentPeb()->ProcessParameters->ConsoleFlags != 1)) (NtCurrentPeb()->ProcessParameters->ConsoleFlags != 1))
{ {
@ -109,14 +109,13 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
if (CtrlHandlers[i - 1](nCode)) break; if (CtrlHandlers[i - 1](nCode)) break;
} }
} }
RtlLeaveCriticalSection(&ConsoleLock); RtlLeaveCriticalSection(&ConsoleLock);
} }
_SEH2_END; _SEH2_END;
ExitThread(0); ExitThread(0);
} }
break; break;
} }
@ -124,25 +123,22 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
case CTRL_LOGOFF_EVENT: case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT: case CTRL_SHUTDOWN_EVENT:
break; break;
case 3: case 3:
ExitThread(0); ExitThread(0);
break; break;
case 4: case 4:
ExitProcess(CONTROL_C_EXIT); ExitProcess(CONTROL_C_EXIT);
break; break;
default: default:
ASSERT(FALSE); ASSERT(FALSE);
break; break;
} }
ASSERT(ConsoleInitialized); ASSERT(ConsoleInitialized);
RtlEnterCriticalSection(&ConsoleLock); RtlEnterCriticalSection(&ConsoleLock);
nExitCode = 0; nExitCode = 0;
if ((nCode != CTRL_C_EVENT) || (NtCurrentPeb()->ProcessParameters->ConsoleFlags != 1)) if ((nCode != CTRL_C_EVENT) || (NtCurrentPeb()->ProcessParameters->ConsoleFlags != 1))
@ -172,9 +168,10 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
} }
} }
} }
RtlLeaveCriticalSection(&ConsoleLock); RtlLeaveCriticalSection(&ConsoleLock);
ExitThread(nExitCode); ExitThread(nExitCode);
return STATUS_SUCCESS;
} }

View file

@ -153,12 +153,10 @@ typedef struct
DWORD ControlKeyState; DWORD ControlKeyState;
} CSRSS_READ_CONSOLE, *PCSRSS_READ_CONSOLE; } CSRSS_READ_CONSOLE, *PCSRSS_READ_CONSOLE;
typedef VOID (CALLBACK *PCONTROLDISPATCHER)(DWORD);
typedef struct typedef struct
{ {
PCONTROLDISPATCHER CtrlDispatcher; LPTHREAD_START_ROUTINE CtrlDispatcher;
BOOLEAN ConsoleNeeded; BOOL ConsoleNeeded;
INT ShowCmd; INT ShowCmd;
HANDLE Console; HANDLE Console;
HANDLE InputHandle; HANDLE InputHandle;
@ -308,7 +306,7 @@ typedef struct
HANDLE ConsoleHandle; HANDLE ConsoleHandle;
BOOL Unicode; BOOL Unicode;
SMALL_RECT ScrollRectangle; SMALL_RECT ScrollRectangle;
BOOLEAN UseClipRectangle; BOOL UseClipRectangle;
SMALL_RECT ClipRectangle; SMALL_RECT ClipRectangle;
COORD DestinationOrigin; COORD DestinationOrigin;
CHAR_INFO Fill; CHAR_INFO Fill;