Revert unwanted changes brought accidentally in r58104.

svn path=/branches/ros-csrss/; revision=58105
This commit is contained in:
Hermès Bélusca-Maïto 2013-01-03 17:47:34 +00:00
parent e4d97e422f
commit 31776e274a
5 changed files with 15 additions and 205 deletions

View file

@ -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 &&

View file

@ -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 */

View file

@ -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;

View file

@ -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);
}
}

View file

@ -11,7 +11,7 @@
#include "consrv.h"
#include "conio.h"
#define NDEBUG
//#define NDEBUG
#include <debug.h>
@ -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);