- Use _SEH2_YIELD when returning from an exception instead of returning outside the...
[reactos.git] / reactos / ntoskrnl / lpc / reply.c
index bd2c9ad..0233ea1 100644 (file)
@@ -160,7 +160,7 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
 {
     PLPCP_PORT_OBJECT Port, ReceivePort, ConnectionPort = NULL;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode(), WaitMode = PreviousMode;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PLPCP_MESSAGE Message;
     PETHREAD Thread = PsGetCurrentThread(), WakeupThread;
     PLPCP_CONNECTION_MESSAGE ConnectMessage;
@@ -178,7 +178,7 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
 
     if (KeGetPreviousMode() == UserMode)
     {
-        _SEH_TRY
+        _SEH2_TRY
         {
             if (ReplyMessage != NULL)
             {
@@ -197,17 +197,13 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
             if (PortContext != NULL)
                 ProbeForWritePointer(PortContext);
         }
-        _SEH_EXCEPT(_SEH_ExSystemExceptionFilter)
+        _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
             DPRINT1("SEH crash [1]\n");
-           DbgBreakPoint();
-            Status = _SEH_GetExceptionCode();
+            DbgBreakPoint();
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
-        _SEH_END;
-
-        /* Bail out if pointer was invalid */
-        if (!NT_SUCCESS(Status))
-            return Status;
+        _SEH2_END;
     }
     else
     {
@@ -427,7 +423,7 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
     Thread->LpcReceivedMessageId = Message->Request.MessageId;
     Thread->LpcReceivedMsgIdValid = TRUE;
 
-    _SEH_TRY
+    _SEH2_TRY
     {
         /* Check if this was a connection request */
         if (LpcpGetMessageType(&Message->Request) == LPC_CONNECTION_REQUEST)
@@ -492,13 +488,13 @@ NtReplyWaitReceivePortEx(IN HANDLE PortHandle,
             ASSERT(FALSE);
         }
     }
-    _SEH_EXCEPT(_SEH_ExSystemExceptionFilter)
+    _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
         DPRINT1("SEH crash [2]\n");
         DbgBreakPoint();
-        Status = _SEH_GetExceptionCode();
+        Status = _SEH2_GetExceptionCode();
     }
-    _SEH_END;
+    _SEH2_END;
 
     /* Check if we have a message pointer here */
     if (Message)