- Hackish solution of issue #2062.

- Turn off title change, as it can cause a deadlock.

svn path=/trunk/; revision=27174
This commit is contained in:
Dmitry Gorbachev 2007-06-14 16:41:55 +00:00
parent 88bc96e3df
commit 0743fc87cf
3 changed files with 26 additions and 11 deletions

View file

@ -13,6 +13,9 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
extern NTSTATUS FASTCALL
Win32CsrInsertObject2(PCSRSS_PROCESS_DATA, PHANDLE, Object_t *);
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
#define ConioInitRect(Rect, Top, Left, Bottom, Right) \ #define ConioInitRect(Rect, Top, Left, Bottom, Right) \
@ -36,14 +39,16 @@
static NTSTATUS FASTCALL static NTSTATUS FASTCALL
ConioConsoleFromProcessData(PCSRSS_PROCESS_DATA ProcessData, PCSRSS_CONSOLE *Console) ConioConsoleFromProcessData(PCSRSS_PROCESS_DATA ProcessData, PCSRSS_CONSOLE *Console)
{ {
if (NULL == ProcessData->Console) PCSRSS_CONSOLE ProcessConsole = ProcessData->Console;
if (!ProcessConsole)
{ {
*Console = NULL; *Console = NULL;
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
EnterCriticalSection(&(ProcessData->Console->Header.Lock)); EnterCriticalSection(&(ProcessConsole->Header.Lock));
*Console = ProcessData->Console; *Console = ProcessConsole;
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -219,7 +224,6 @@ CsrInitConsole(PCSRSS_CONSOLE Console)
return Status; return Status;
} }
/* copy buffer contents to screen */ /* copy buffer contents to screen */
ConioDrawConsole(Console); ConioDrawConsole(Console);
@ -305,9 +309,9 @@ CSR_API(CsrAllocConsole)
if (NewConsole || !ProcessData->bInheritHandles) if (NewConsole || !ProcessData->bInheritHandles)
{ {
/* Insert the Objects */ /* Insert the Objects */
Status = Win32CsrInsertObject(ProcessData, Status = Win32CsrInsertObject2(ProcessData,
&Request->Data.AllocConsoleRequest.InputHandle, &Request->Data.AllocConsoleRequest.InputHandle,
&Console->Header); &Console->Header);
if (! NT_SUCCESS(Status)) if (! NT_SUCCESS(Status))
{ {
DPRINT1("Failed to insert object\n"); DPRINT1("Failed to insert object\n");
@ -316,9 +320,9 @@ CSR_API(CsrAllocConsole)
return Request->Status = Status; return Request->Status = Status;
} }
Status = Win32CsrInsertObject(ProcessData, Status = Win32CsrInsertObject2(ProcessData,
&Request->Data.AllocConsoleRequest.OutputHandle, &Request->Data.AllocConsoleRequest.OutputHandle,
&Console->ActiveBuffer->Header); &Console->ActiveBuffer->Header);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("Failed to insert object\n"); DPRINT1("Failed to insert object\n");

View file

@ -103,6 +103,14 @@ Win32CsrInsertObject(PCSRSS_PROCESS_DATA ProcessData,
return (CsrExports.CsrInsertObjectProc)(ProcessData, Handle, Object); 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 NTSTATUS FASTCALL
Win32CsrGetObject(PCSRSS_PROCESS_DATA ProcessData, Win32CsrGetObject(PCSRSS_PROCESS_DATA ProcessData,
HANDLE Handle, HANDLE Handle,

View file

@ -1916,7 +1916,10 @@ GuiChangeTitle(PCSRSS_CONSOLE Console)
{ {
Title = L""; Title = L"";
} }
SendMessageW(Console->hWindow, WM_SETTEXT, 0, (LPARAM) Title);
/* FIXME: deadlock */
//SendMessageW(Console->hWindow, WM_SETTEXT, 0, (LPARAM) Title);
if (NULL != Buffer) if (NULL != Buffer)
{ {
HeapFree(Win32CsrApiHeap, 0, Buffer); HeapFree(Win32CsrApiHeap, 0, Buffer);