Author: hbelusca
Date: Sun Nov 23 14:26:37 2014
New Revision: 65457

URL: http://svn.reactos.org/svn/reactos?rev=65457&view=rev
Log:
[CONSRV]: Reduce code duplication and remove unused InputWaitHandle member.

Modified:
    trunk/reactos/win32ss/user/winsrv/consrv/console.c
    trunk/reactos/win32ss/user/winsrv/consrv/consrv.h
    trunk/reactos/win32ss/user/winsrv/consrv/handle.c
    trunk/reactos/win32ss/user/winsrv/consrv/init.c
    trunk/reactos/win32ss/user/winsrv/consrv/procinit.h

Modified: trunk/reactos/win32ss/user/winsrv/consrv/console.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/console.c?rev=65457&r1=65456&r2=65457&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/console.c  [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/console.c  [iso-8859-1] Sun Nov 23 
14:26:37 2014
@@ -283,8 +283,6 @@
     ASSERT(Console);
     *Console = NULL;
 
-    // RtlEnterCriticalSection(&ProcessData->HandleTableLock);
-
     if (ConSrvValidateConsole(&GrabConsole,
                               ProcessData->ConsoleHandle,
                               CONSOLE_RUNNING,
@@ -295,7 +293,6 @@
         Status = STATUS_SUCCESS;
     }
 
-    // RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
     return Status;
 }
 
@@ -948,14 +945,6 @@
         return Status;
     }
 
-    /* Mark the process as having a console */
-    ProcessData->ConsoleApp = TRUE;
-    CsrProcess->Flags |= CsrProcessIsConsoleApp;
-
-    /* Return the console handle and the input wait handle to the caller */
-    AllocConsoleRequest->ConsoleStartInfo->ConsoleHandle   = 
ProcessData->ConsoleHandle;
-    AllocConsoleRequest->ConsoleStartInfo->InputWaitHandle = 
ProcessData->InputWaitHandle;
-
     /* Set the Property-Dialog and Control-Dispatcher handlers */
     ProcessData->PropRoutine = AllocConsoleRequest->PropRoutine;
     ProcessData->CtrlRoutine = AllocConsoleRequest->CtrlRoutine;
@@ -1038,14 +1027,6 @@
         goto Quit;
     }
 
-    /* Mark the process as having a console */
-    TargetProcessData->ConsoleApp = TRUE;
-    TargetProcess->Flags |= CsrProcessIsConsoleApp;
-
-    /* Return the console handle and the input wait handle to the caller */
-    AttachConsoleRequest->ConsoleStartInfo->ConsoleHandle   = 
TargetProcessData->ConsoleHandle;
-    AttachConsoleRequest->ConsoleStartInfo->InputWaitHandle = 
TargetProcessData->InputWaitHandle;
-
     /* Set the Property-Dialog and Control-Dispatcher handlers */
     TargetProcessData->PropRoutine = AttachConsoleRequest->PropRoutine;
     TargetProcessData->CtrlRoutine = AttachConsoleRequest->CtrlRoutine;
@@ -1060,16 +1041,7 @@
 
 CSR_API(SrvFreeConsole)
 {
-    PCSR_PROCESS CsrProcess = CsrGetClientThread()->Process;
-    PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrProcess);
-
-    
ConSrvRemoveConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process));
-
-    /* Mark the process as not having a console anymore */
-    ProcessData->ConsoleApp = FALSE;
-    CsrProcess->Flags &= ~CsrProcessIsConsoleApp;
-
-    return STATUS_SUCCESS;
+    return 
ConSrvRemoveConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process));
 }
 
 NTSTATUS NTAPI

Modified: trunk/reactos/win32ss/user/winsrv/consrv/consrv.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/consrv.h?rev=65457&r1=65456&r2=65457&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/consrv.h   [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/consrv.h   [iso-8859-1] Sun Nov 23 
14:26:37 2014
@@ -53,9 +53,7 @@
     PCSR_PROCESS Process;   // Process owning this structure.
 
     HANDLE ConsoleHandle;
-    HANDLE InputWaitHandle;
-
-    BOOLEAN ConsoleApp;    // TRUE if it is a CUI app, FALSE otherwise.
+    BOOLEAN ConsoleApp;     // TRUE if it is a CUI app, FALSE otherwise.
 
     RTL_CRITICAL_SECTION HandleTableLock;
     ULONG HandleTableSize;

Modified: trunk/reactos/win32ss/user/winsrv/consrv/handle.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/handle.c?rev=65457&r1=65456&r2=65457&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/handle.c   [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/handle.c   [iso-8859-1] Sun Nov 23 
14:26:37 2014
@@ -555,7 +555,7 @@
     Status = NtDuplicateObject(NtCurrentProcess(),
                                Console->InputBuffer.ActiveEvent,
                                ProcessData->Process->ProcessHandle,
-                               &ProcessData->InputWaitHandle,
+                               
&ConsoleInitInfo->ConsoleStartInfo->InputWaitHandle,
                                EVENT_ALL_ACCESS, 0, 0);
     if (!NT_SUCCESS(Status))
     {
@@ -567,6 +567,13 @@
         ProcessData->ConsoleHandle = NULL;
         return Status;
     }
+
+    /* Mark the process as having a console */
+    ProcessData->ConsoleApp = TRUE;
+    ProcessData->Process->Flags |= CsrProcessIsConsoleApp;
+
+    /* Return the console handle to the caller */
+    ConsoleInitInfo->ConsoleStartInfo->ConsoleHandle = 
ProcessData->ConsoleHandle;
 
     /* Insert the process into the processes list of the console */
     InsertHeadList(&Console->ProcessList, &ProcessData->ConsoleLink);
@@ -664,7 +671,7 @@
     Status = NtDuplicateObject(NtCurrentProcess(),
                                Console->InputBuffer.ActiveEvent,
                                ProcessData->Process->ProcessHandle,
-                               &ProcessData->InputWaitHandle,
+                               &ConsoleStartInfo->InputWaitHandle,
                                EVENT_ALL_ACCESS, 0, 0);
     if (!NT_SUCCESS(Status))
     {
@@ -676,6 +683,13 @@
         goto Quit;
     }
 
+    /* Mark the process as having a console */
+    ProcessData->ConsoleApp = TRUE;
+    ProcessData->Process->Flags |= CsrProcessIsConsoleApp;
+
+    /* Return the console handle to the caller */
+    ConsoleStartInfo->ConsoleHandle = ProcessData->ConsoleHandle;
+
     /* Insert the process into the processes list of the console */
     InsertHeadList(&Console->ProcessList, &ProcessData->ConsoleLink);
 
@@ -693,74 +707,78 @@
     return Status;
 }
 
-VOID
+NTSTATUS
 ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData)
 {
     PCONSOLE Console;
+    PCONSOLE_PROCESS_DATA ConsoleLeaderProcess;
 
     DPRINT("ConSrvRemoveConsole\n");
 
-    // RtlEnterCriticalSection(&ProcessData->HandleTableLock);
+    /* Mark the process as not having a console anymore */
+    ProcessData->ConsoleApp = FALSE;
+    ProcessData->Process->Flags &= ~CsrProcessIsConsoleApp;
 
     /* Validate and lock the console */
-    if (ConSrvValidateConsole(&Console,
-                              ProcessData->ConsoleHandle,
-                              CONSOLE_RUNNING, TRUE))
-    {
-        /* Retrieve the console leader process */
-        PCONSOLE_PROCESS_DATA ConsoleLeaderProcess = 
ConSrvGetConsoleLeaderProcess(Console);
-
-        DPRINT("ConSrvRemoveConsole - Locking OK\n");
-
-        /* Close all console handles and free the handles table */
-        ConSrvFreeHandlesTable(ProcessData);
-
-        /* Detach the process from the console */
-        ProcessData->ConsoleHandle = NULL;
-
-        /* Remove the process from the console's list of processes */
-        RemoveEntryList(&ProcessData->ConsoleLink);
-
-        /* Check whether the console should send a last close notification */
-        if (Console->NotifyLastClose)
+    if (!ConSrvValidateConsole(&Console,
+                               ProcessData->ConsoleHandle,
+                               CONSOLE_RUNNING, TRUE))
+    {
+        // FIXME: Find another status code
+        return STATUS_UNSUCCESSFUL;
+    }
+
+    DPRINT("ConSrvRemoveConsole - Locking OK\n");
+
+    /* Retrieve the console leader process */
+    ConsoleLeaderProcess = ConSrvGetConsoleLeaderProcess(Console);
+
+    /* Close all console handles and free the handles table */
+    ConSrvFreeHandlesTable(ProcessData);
+
+    /* Detach the process from the console */
+    ProcessData->ConsoleHandle = NULL;
+
+    /* Remove the process from the console's list of processes */
+    RemoveEntryList(&ProcessData->ConsoleLink);
+
+    /* Check whether the console should send a last close notification */
+    if (Console->NotifyLastClose)
+    {
+        /* If we are removing the process which wants the last close 
notification... */
+        if (ProcessData == Console->NotifiedLastCloseProcess)
         {
-            /* If we are removing the process which wants the last close 
notification... */
-            if (ProcessData == Console->NotifiedLastCloseProcess)
-            {
-                /* ... just reset the flag and the pointer... */
-                Console->NotifyLastClose = FALSE;
-                Console->NotifiedLastCloseProcess = NULL;
-            }
+            /* ... just reset the flag and the pointer... */
+            Console->NotifyLastClose = FALSE;
+            Console->NotifiedLastCloseProcess = NULL;
+        }
+        /*
+         * ... otherwise, if we are removing the console leader process
+         * (that cannot be the process wanting the notification, because
+         * the previous case already dealt with it)...
+         */
+        else if (ProcessData == ConsoleLeaderProcess)
+        {
             /*
-             * ... otherwise, if we are removing the console leader process
-             * (that cannot be the process wanting the notification, because
-             * the previous case already dealt with it)...
+             * ... reset the flag first (so that we avoid multiple 
notifications)
+             * and then send the last close notification.
              */
-            else if (ProcessData == ConsoleLeaderProcess)
-            {
-                /*
-                 * ... reset the flag first (so that we avoid multiple 
notifications)
-                 * and then send the last close notification.
-                 */
-                Console->NotifyLastClose = FALSE;
-                ConSrvConsoleCtrlEvent(CTRL_LAST_CLOSE_EVENT, 
Console->NotifiedLastCloseProcess);
-
-                /* Only now, reset the pointer */
-                Console->NotifiedLastCloseProcess = NULL;
-            }
+            Console->NotifyLastClose = FALSE;
+            ConSrvConsoleCtrlEvent(CTRL_LAST_CLOSE_EVENT, 
Console->NotifiedLastCloseProcess);
+
+            /* Only now, reset the pointer */
+            Console->NotifiedLastCloseProcess = NULL;
         }
-
-        /* Update the internal info of the terminal */
-        TermRefreshInternalInfo(Console);
-
-        /* Release the console */
-        DPRINT("ConSrvRemoveConsole - Decrement Console->ReferenceCount = 
%lu\n", Console->ReferenceCount);
-        ConSrvReleaseConsole(Console, TRUE);
-        //CloseHandle(ProcessData->InputWaitHandle);
-        //ProcessData->InputWaitHandle = NULL;
-    }
-
-    // RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
+    }
+
+    /* Update the internal info of the terminal */
+    TermRefreshInternalInfo(Console);
+
+    /* Release the console */
+    DPRINT("ConSrvRemoveConsole - Decrement Console->ReferenceCount = %lu\n", 
Console->ReferenceCount);
+    ConSrvReleaseConsole(Console, TRUE);
+
+    return STATUS_SUCCESS;
 }
 
 

Modified: trunk/reactos/win32ss/user/winsrv/consrv/init.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/init.c?rev=65457&r1=65456&r2=65457&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/init.c     [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/init.c     [iso-8859-1] Sun Nov 23 
14:26:37 2014
@@ -353,7 +353,6 @@
     /* Initialize the new (target) process */
     RtlZeroMemory(TargetProcessData, sizeof(*TargetProcessData));
     TargetProcessData->Process = TargetProcess;
-    TargetProcessData->InputWaitHandle = NULL;
     TargetProcessData->ConsoleHandle = NULL;
     TargetProcessData->ConsoleApp = FALSE;
 
@@ -491,14 +490,6 @@
         }
     }
 
-    /* Mark the process as having a console */
-    ProcessData->ConsoleApp = TRUE;
-    // ProcessData->Flags |= CsrProcessIsConsoleApp;
-
-    /* Return the console handle and the input wait handle to the caller */
-    ConnectInfo->ConsoleStartInfo.ConsoleHandle   = ProcessData->ConsoleHandle;
-    ConnectInfo->ConsoleStartInfo.InputWaitHandle = 
ProcessData->InputWaitHandle;
-
     /* Set the Property-Dialog and Control-Dispatcher handlers */
     ProcessData->PropRoutine = ConnectInfo->PropRoutine;
     ProcessData->CtrlRoutine = ConnectInfo->CtrlRoutine;
@@ -521,10 +512,6 @@
     {
         DPRINT("ConSrvDisconnect - calling ConSrvRemoveConsole\n");
         ConSrvRemoveConsole(ProcessData);
-
-        /* Mark the process as not having a console anymore */
-        ProcessData->ConsoleApp = FALSE;
-        Process->Flags &= ~CsrProcessIsConsoleApp;
     }
 
     RtlDeleteCriticalSection(&ProcessData->HandleTableLock);

Modified: trunk/reactos/win32ss/user/winsrv/consrv/procinit.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/procinit.h?rev=65457&r1=65456&r2=65457&view=diff
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/procinit.h [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/procinit.h [iso-8859-1] Sun Nov 23 
14:26:37 2014
@@ -20,4 +20,4 @@
                               PHANDLE pOutputHandle,
                               PHANDLE pErrorHandle,
                               PCONSOLE_START_INFO ConsoleStartInfo);
-VOID ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData);
+NTSTATUS ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData);


Reply via email to