From 31776e274a7d33b040ca94a8b26397c0315807be Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 3 Jan 2013 17:47:34 +0000 Subject: [PATCH 1/1] [CONSRV] Revert unwanted changes brought accidentally in r58104. svn path=/branches/ros-csrss/; revision=58105 --- win32ss/user/consrv/coninput.c | 79 +-------------------------------- win32ss/user/consrv/conio.h | 22 +++------ win32ss/user/consrv/conoutput.c | 13 ------ win32ss/user/consrv/console.c | 63 ++------------------------ win32ss/user/consrv/handle.c | 43 ++---------------- 5 files changed, 15 insertions(+), 205 deletions(-) diff --git a/win32ss/user/consrv/coninput.c b/win32ss/user/consrv/coninput.c index 39a79d27e6e..49263c6e77d 100644 --- a/win32ss/user/consrv/coninput.c +++ b/win32ss/user/consrv/coninput.c @@ -88,16 +88,6 @@ ConioProcessChar(PCSRSS_CONSOLE Console, InsertTailList(&Console->InputEvents, &ConInRec->ListEntry); SetEvent(Console->ActiveEvent); -/* - if (CsrNotifyWait(&Console->ReadWaitQueue, - WaitAny, - NULL, - NULL)) - { - ASSERT(Console->SatisfiedWaits == NULL); - Console->SatisfiedWaits = &Console->ReadWaitQueue; - } -*/ CsrNotifyWait(&Console->ReadWaitQueue, WaitAny, NULL, @@ -265,7 +255,7 @@ ConioProcessKey(MSG *msg, PCSRSS_CONSOLE Console, BOOL TextMode) { current = CONTAINING_RECORD(current_entry, CONSOLE_PROCESS_DATA, ConsoleLink); current_entry = current_entry->Flink; - ConioConsoleCtrlEvent(CTRL_C_EVENT, current); + ConioConsoleCtrlEvent((DWORD)CTRL_C_EVENT, current); } if (Console->LineBuffer && !Console->LineComplete) { @@ -334,7 +324,6 @@ WaitBeforeReading(IN PGET_INPUT_INFO InputInfo, CapturedInputInfo, NULL)) { - /* Fail */ HeapFree(ConSrvHeap, 0, CapturedInputInfo); return STATUS_NO_MEMORY; } @@ -364,46 +353,11 @@ ReadInputBufferThread(IN PLIST_ENTRY WaitList, PCSRSS_GET_CONSOLE_INPUT GetConsoleInputRequest = &((PCONSOLE_API_MESSAGE)WaitApiMessage)->Data.GetConsoleInputRequest; PGET_INPUT_INFO InputInfo = (PGET_INPUT_INFO)WaitContext; - DWORD Flag = (DWORD)WaitArgument1; - BOOLEAN InputHandleClosing = (WaitArgument2 == (PVOID)0xdeaddead); - - DPRINT("ReadInputBufferThread - WaitContext = 0x%p, WaitArgument1 = 0x%p, WaitArgument2 = 0x%p, WaitFlags = %lu\n", WaitContext, WaitArgument1, WaitArgument2, WaitFlags); - - /* - * If we are signaled by pressing Ctrl-C or Ctrl-Break, - * just ignore this event. - */ - if ( (Flag == 1 << CTRL_C_EVENT) || - (Flag == 1 << CTRL_BREAK_EVENT) ) - { - return FALSE; - } - - /* - * If we are called via CsrNotifyWaitBlock by a call to - * CsrDestroyProcess or CsrDestroyThread, just return. - */ - if (WaitFlags & CsrProcessTerminating) - { - Status = STATUS_THREAD_IS_TERMINATING; - goto Quit; - } - - /* - * If we are about to close an input handle, then just return. - */ - if (InputHandleClosing) - { - Status = STATUS_ALERTED; - goto Quit; - } - Status = ReadInputBuffer(InputInfo, GetConsoleInputRequest->bRead, WaitApiMessage, FALSE); -Quit: if (Status != STATUS_PENDING) { WaitApiMessage->Status = Status; @@ -496,38 +450,10 @@ ReadCharsThread(IN PLIST_ENTRY WaitList, NTSTATUS Status; PGET_INPUT_INFO InputInfo = (PGET_INPUT_INFO)WaitContext; - DWORD Flag = (DWORD)WaitArgument1; - BOOLEAN InputHandleClosing = (WaitArgument2 == (PVOID)0xdeaddead); - - DPRINT("ReadCharsThread - WaitContext = 0x%p, WaitArgument1 = 0x%p, WaitArgument2 = 0x%p, WaitFlags = %lu\n", WaitContext, WaitArgument1, WaitArgument2, WaitFlags); - - /* - * If we are called via CsrNotifyWaitBlock by a call to - * CsrDestroyProcess or CsrDestroyThread, just return. - */ - if (WaitFlags & CsrProcessTerminating) - { - Status = STATUS_THREAD_IS_TERMINATING; - goto Quit; - } - - /* - * If we are signaled by pressing Ctrl-C or Ctrl-Break, - * or that we close an input handle, then just return. - */ - if ( (Flag == 1 << CTRL_C_EVENT) || - (Flag == 1 << CTRL_BREAK_EVENT) || - (InputHandleClosing == TRUE) ) - { - Status = STATUS_ALERTED; - goto Quit; - } - Status = ReadChars(InputInfo, WaitApiMessage, FALSE); -Quit: if (Status != STATUS_PENDING) { WaitApiMessage->Status = Status; @@ -553,7 +479,6 @@ ReadChars(IN PGET_INPUT_INFO InputInfo, /* We haven't read anything (yet) */ - // Cooked-like mode if (InputInfo->Console->Mode & ENABLE_LINE_INPUT) { if (InputInfo->Console->LineBuffer == NULL) @@ -638,7 +563,7 @@ ReadChars(IN PGET_INPUT_INFO InputInfo, WaitForMoreToRead = FALSE; } } - else // Raw-like mode + else { /* Character input */ while ( ReadConsoleRequest->NrCharactersRead < nNumberOfCharsToRead && diff --git a/win32ss/user/consrv/conio.h b/win32ss/user/consrv/conio.h index 56fe00f20c8..9e342314b65 100644 --- a/win32ss/user/consrv/conio.h +++ b/win32ss/user/consrv/conio.h @@ -29,17 +29,16 @@ typedef struct tagCSRSS_SCREEN_BUFFER { Object_t Header; /* Object header */ - LIST_ENTRY ListEntry; /* Entry in console's list of buffers */ - - BYTE *Buffer; /* Pointer to screen buffer */ - USHORT MaxX, MaxY; /* Size of the entire scrollback buffer */ - USHORT ShowX, ShowY; /* Beginning offset for the actual display area */ + BYTE *Buffer; /* pointer to screen buffer */ + USHORT MaxX, MaxY; /* size of the entire scrollback buffer */ + USHORT ShowX, ShowY; /* beginning offset for the actual display area */ ULONG CurrentX; /* Current X cursor position */ ULONG CurrentY; /* Current Y cursor position */ - WORD DefaultAttrib; /* Default char attribute */ - USHORT VirtualY; /* Top row of buffer being displayed, reported to callers */ + WORD DefaultAttrib; /* default char attribute */ + USHORT VirtualY; /* top row of buffer being displayed, reported to callers */ CONSOLE_CURSOR_INFO CursorInfo; USHORT Mode; + LIST_ENTRY ListEntry; /* entry in console's list of buffers */ } CSRSS_SCREEN_BUFFER, *PCSRSS_SCREEN_BUFFER; typedef struct tagCSRSS_CONSOLE @@ -78,15 +77,6 @@ typedef struct tagCSRSS_CONSOLE HANDLE UnpauseEvent; LIST_ENTRY WriteWaitQueue; /* List head for the queue of write wait blocks */ -#if 0 - /* Pointers to lists of wait blocks, when they contain satisfied waits to be freed */ - PLIST_ENTRY SatisfiedWaits; - - /* Pointers to lists of wait blocks, when they contain satisfied waits to be freed */ - PLIST_ENTRY ReadSatisfiedWaits; - PLIST_ENTRY WriteSatisfiedWaits; -#endif - WORD Mode; /* Console mode flags */ UNICODE_STRING Title; /* Title of console */ DWORD HardwareState; /* _GDI_MANAGED, _DIRECT */ diff --git a/win32ss/user/consrv/conoutput.c b/win32ss/user/consrv/conoutput.c index c6ed306bdf6..719a534037d 100644 --- a/win32ss/user/consrv/conoutput.c +++ b/win32ss/user/consrv/conoutput.c @@ -447,23 +447,10 @@ WriteConsoleThread(IN PLIST_ENTRY WaitList, { NTSTATUS Status; - DPRINT("WriteConsoleThread - WaitContext = 0x%p, WaitArgument1 = 0x%p, WaitArgument2 = 0x%p, WaitFlags = %lu\n", WaitContext, WaitArgument1, WaitArgument2, WaitFlags); - - /* - * If we are called via CsrNotifyWaitBlock by a call to - * CsrDestroyProcess or CsrDestroyThread, just return. - */ - if (WaitFlags & CsrProcessTerminating) - { - Status = STATUS_THREAD_IS_TERMINATING; - goto Quit; - } - Status = DoWriteConsole(WaitApiMessage, WaitThread, FALSE); -Quit: if (Status != STATUS_PENDING) { WaitApiMessage->Status = Status; diff --git a/win32ss/user/consrv/console.c b/win32ss/user/consrv/console.c index fb0a78505cd..7c4a794606c 100644 --- a/win32ss/user/consrv/console.c +++ b/win32ss/user/consrv/console.c @@ -64,42 +64,6 @@ ConioConsoleCtrlEventTimeout(DWORD Event, DPRINT("ConioConsoleCtrlEvent Parent ProcessId = %x\n", ProcessData->Process->ClientId.UniqueProcess); - /* Notify all the waits only if we see Ctrl-C or Ctrl-Break */ - if (Event == CTRL_C_EVENT || Event == CTRL_BREAK_EVENT) - { - DWORD Flag = (1 << Event); // Transform an integer value to a power of 2. - NTSTATUS Status; - PCSRSS_CONSOLE Console; - // LIST_ENTRY WaitQueue; - - DPRINT1("ConioConsoleCtrlEvent - Ctrl-C captured\n"); - Status = ConioConsoleFromProcessData(ProcessData, &Console); - if (NT_SUCCESS(Status)) - { - DPRINT1("ConioConsoleCtrlEvent - console captured, try to dereference waits...\n"); - /* - * Wake-up all of the writing waiters, dereference them - * and purge them all from the list. - */ - if (CsrNotifyWait(&Console->ReadWaitQueue, - WaitAll, - (PVOID)Flag, - NULL)) - { - DPRINT1("ConioConsoleCtrlEvent - waits dereferenced...\n"); - // InitializeListHead(&WaitQueue); - - // CsrMoveSatisfiedWait(&WaitQueue, &Console->ReadWaitQueue); - if (!IsListEmpty(&Console->ReadWaitQueue /* &WaitQueue */)) - { - CsrDereferenceWait(&Console->ReadWaitQueue /* &WaitQueue */); - } - } - ConioUnlockConsole(Console); // NOTE_WAITS: <-- Here we have the possibility to free the console waits also. - } - } - - /* Notify the process of the control event */ if (ProcessData->CtrlDispatcher) { Thread = CreateRemoteThread(ProcessData->Process->ProcessHandle, NULL, 0, @@ -166,7 +130,6 @@ CsrInitConsole(PCSRSS_CONSOLE* NewConsole, int ShowCmd) InitializeListHead(&Console->ProcessList); InitializeListHead(&Console->BufferList); Console->ActiveBuffer = NULL; - // Console->SatisfiedWaits = NULL; InitializeListHead(&Console->ReadWaitQueue); InitializeListHead(&Console->WriteWaitQueue); InitializeListHead(&Console->InputEvents); @@ -490,9 +453,6 @@ ConioDeleteConsole(PCSRSS_CONSOLE Console) DPRINT("ConioDeleteConsole\n"); - /* TODO: Dereference all the waits in Console->ReadWaitQueue */ - /* TODO: Dereference all the waits in Console->WriteWaitQueue */ - /* Drain input event queue */ while (Console->InputEvents.Flink != &Console->InputEvents) { @@ -541,8 +501,6 @@ ConioPause(PCSRSS_CONSOLE Console, UINT Flags) VOID FASTCALL ConioUnpause(PCSRSS_CONSOLE Console, UINT Flags) { - // LIST_ENTRY WaitQueue; - Console->PauseFlags &= ~Flags; // if ((Console->PauseFlags & (PAUSED_FROM_KEYBOARD | PAUSED_FROM_SCROLLBAR | PAUSED_FROM_SELECTION)) == 0) @@ -552,23 +510,10 @@ ConioUnpause(PCSRSS_CONSOLE Console, UINT Flags) CloseHandle(Console->UnpauseEvent); Console->UnpauseEvent = NULL; - /* - * Wake-up all of the writing waiters, dereference them - * and purge them all from the list. - */ - if (CsrNotifyWait(&Console->WriteWaitQueue, - WaitAll, - NULL, - NULL)) - { - // InitializeListHead(&WaitQueue); - - // CsrMoveSatisfiedWait(&WaitQueue, &Console->WriteWaitQueue); - if (!IsListEmpty(&Console->WriteWaitQueue /* &WaitQueue */)) - { - CsrDereferenceWait(&Console->WriteWaitQueue /* &WaitQueue */); - } - } + CsrNotifyWait(&Console->WriteWaitQueue, + WaitAll, + NULL, + NULL); } } diff --git a/win32ss/user/consrv/handle.c b/win32ss/user/consrv/handle.c index 21acf942a92..6a92235ed75 100644 --- a/win32ss/user/consrv/handle.c +++ b/win32ss/user/consrv/handle.c @@ -11,7 +11,7 @@ #include "consrv.h" #include "conio.h" -#define NDEBUG +//#define NDEBUG #include @@ -47,33 +47,11 @@ static VOID Win32CsrCloseHandleEntry(PCSRSS_HANDLE Entry) { Object_t *Object = Entry->Object; - if (Object != NULL) { PCSRSS_CONSOLE Console = Object->Console; EnterCriticalSection(&Console->Lock); - if (Object->Type == CONIO_CONSOLE_MAGIC) - { - // LIST_ENTRY WaitQueue; - - /* - * Wake-up all of the writing waiters if any, dereference them - * and purge them all from the list. - */ - CsrNotifyWait(&Console->ReadWaitQueue, - WaitAll, - NULL, - (PVOID)0xdeaddead); - // InitializeListHead(&WaitQueue); - - // CsrMoveSatisfiedWait(&WaitQueue, &Console->ReadWaitQueue); - if (!IsListEmpty(&Console->ReadWaitQueue /* &WaitQueue */)) - { - CsrDereferenceWait(&Console->ReadWaitQueue /* &WaitQueue */); - } - } - /* If the last handle to a screen buffer is closed, delete it... */ if (AdjustHandleCounts(Entry, -1) == 0) { @@ -165,6 +143,8 @@ Win32CsrReleaseObject(PCONSOLE_PROCESS_DATA ProcessData, RtlLeaveCriticalSection(&ProcessData->HandleTableLock); return STATUS_INVALID_HANDLE; } + + DPRINT1("Win32CsrReleaseObject - Process 0x%p, Release 0x%p\n", ProcessData->Process, &ProcessData->HandleTable[h]); Win32CsrCloseHandleEntry(&ProcessData->HandleTable[h]); RtlLeaveCriticalSection(&ProcessData->HandleTableLock); @@ -210,23 +190,6 @@ Win32CsrUnlockConsole(PCSRSS_CONSOLE Console) { LeaveCriticalSection(&Console->Lock); -#if 0 - /* If it was the last held lock for the owning thread... */ - if (&Console->Lock.RecursionCount == 0) - { - /* ...dereference waiting threads if any */ - LIST_ENTRY WaitQueue; - InitializeListHead(&WaitQueue); - - CsrMoveSatisfiedWait(&WaitQueue, Console->SatisfiedWaits); - Console->SatisfiedWaits = NULL; - if (!IsListEmpty(&WaitQueue)) - { - CsrDereferenceWait(&WaitQueue); - } - } -#endif - /* Decrement reference count */ if (_InterlockedDecrement(&Console->ReferenceCount) == 0) ConioDeleteConsole(Console); -- 2.17.1