From 0743fc87cf750e2006ea6f87c083dbaea66cef80 Mon Sep 17 00:00:00 2001 From: Dmitry Gorbachev Date: Thu, 14 Jun 2007 16:41:55 +0000 Subject: [PATCH] - Hackish solution of issue #2062. - Turn off title change, as it can cause a deadlock. svn path=/trunk/; revision=27174 --- .../subsystems/win32/csrss/win32csr/conio.c | 24 +++++++++++-------- .../subsystems/win32/csrss/win32csr/dllmain.c | 8 +++++++ .../win32/csrss/win32csr/guiconsole.c | 5 +++- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/reactos/subsystems/win32/csrss/win32csr/conio.c b/reactos/subsystems/win32/csrss/win32csr/conio.c index 4fdee22be97..96186ba029b 100644 --- a/reactos/subsystems/win32/csrss/win32csr/conio.c +++ b/reactos/subsystems/win32/csrss/win32csr/conio.c @@ -13,6 +13,9 @@ #define NDEBUG #include +extern NTSTATUS FASTCALL +Win32CsrInsertObject2(PCSRSS_PROCESS_DATA, PHANDLE, Object_t *); + /* GLOBALS *******************************************************************/ #define ConioInitRect(Rect, Top, Left, Bottom, Right) \ @@ -36,14 +39,16 @@ static NTSTATUS FASTCALL ConioConsoleFromProcessData(PCSRSS_PROCESS_DATA ProcessData, PCSRSS_CONSOLE *Console) { - if (NULL == ProcessData->Console) + PCSRSS_CONSOLE ProcessConsole = ProcessData->Console; + + if (!ProcessConsole) { *Console = NULL; return STATUS_SUCCESS; } - EnterCriticalSection(&(ProcessData->Console->Header.Lock)); - *Console = ProcessData->Console; + EnterCriticalSection(&(ProcessConsole->Header.Lock)); + *Console = ProcessConsole; return STATUS_SUCCESS; } @@ -219,7 +224,6 @@ CsrInitConsole(PCSRSS_CONSOLE Console) return Status; } - /* copy buffer contents to screen */ ConioDrawConsole(Console); @@ -305,9 +309,9 @@ CSR_API(CsrAllocConsole) if (NewConsole || !ProcessData->bInheritHandles) { /* Insert the Objects */ - Status = Win32CsrInsertObject(ProcessData, - &Request->Data.AllocConsoleRequest.InputHandle, - &Console->Header); + Status = Win32CsrInsertObject2(ProcessData, + &Request->Data.AllocConsoleRequest.InputHandle, + &Console->Header); if (! NT_SUCCESS(Status)) { DPRINT1("Failed to insert object\n"); @@ -316,9 +320,9 @@ CSR_API(CsrAllocConsole) return Request->Status = Status; } - Status = Win32CsrInsertObject(ProcessData, - &Request->Data.AllocConsoleRequest.OutputHandle, - &Console->ActiveBuffer->Header); + Status = Win32CsrInsertObject2(ProcessData, + &Request->Data.AllocConsoleRequest.OutputHandle, + &Console->ActiveBuffer->Header); if (!NT_SUCCESS(Status)) { DPRINT1("Failed to insert object\n"); diff --git a/reactos/subsystems/win32/csrss/win32csr/dllmain.c b/reactos/subsystems/win32/csrss/win32csr/dllmain.c index 31272065ca6..474a561f319 100644 --- a/reactos/subsystems/win32/csrss/win32csr/dllmain.c +++ b/reactos/subsystems/win32/csrss/win32csr/dllmain.c @@ -103,6 +103,14 @@ Win32CsrInsertObject(PCSRSS_PROCESS_DATA ProcessData, return (CsrExports.CsrInsertObjectProc)(ProcessData, Handle, Object); } +NTSTATUS FASTCALL +Win32CsrInsertObject2(PCSRSS_PROCESS_DATA ProcessData, + PHANDLE Handle, + Object_t *Object) +{ + return (CsrExports.CsrInsertObjectProc)(ProcessData, Handle, Object); +} + NTSTATUS FASTCALL Win32CsrGetObject(PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, diff --git a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c index f5ffbe63d12..5e27d422b84 100644 --- a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c +++ b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c @@ -1916,7 +1916,10 @@ GuiChangeTitle(PCSRSS_CONSOLE Console) { Title = L""; } - SendMessageW(Console->hWindow, WM_SETTEXT, 0, (LPARAM) Title); + + /* FIXME: deadlock */ + //SendMessageW(Console->hWindow, WM_SETTEXT, 0, (LPARAM) Title); + if (NULL != Buffer) { HeapFree(Win32CsrApiHeap, 0, Buffer);