svn path=/trunk/; revision=59967
//
// LPC Locking Flags
//
//
// LPC Locking Flags
//
-#define LPCP_LOCK_OWNED 1
+#define LPCP_LOCK_HELD 1
#define LPCP_LOCK_RELEASE 2
//
#define LPCP_LOCK_RELEASE 2
//
PLPCP_CONNECTION_MESSAGE ConnectMessage;
PLPCP_PORT_OBJECT ClientPort = NULL;
PETHREAD Thread = NULL;
PLPCP_CONNECTION_MESSAGE ConnectMessage;
PLPCP_PORT_OBJECT ClientPort = NULL;
PETHREAD Thread = NULL;
- BOOLEAN LockHeld = (LockFlags & LPCP_LOCK_OWNED);
+ BOOLEAN LockHeld = (LockFlags & LPCP_LOCK_HELD);
BOOLEAN ReleaseLock = (LockFlags & LPCP_LOCK_RELEASE);
PAGED_CODE();
BOOLEAN ReleaseLock = (LockFlags & LPCP_LOCK_RELEASE);
PAGED_CODE();
Thread->LpcReplyMessage = NULL;
/* And remove the message from the port zone */
Thread->LpcReplyMessage = NULL;
/* And remove the message from the port zone */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD);
NextEntry = Port->LpcReplyChainHead.Flink;
}
NextEntry = Port->LpcReplyChainHead.Flink;
}
InitializeListHead(&Message->Entry);
/* Remove it from the port zone */
InitializeListHead(&Message->Entry);
/* Remove it from the port zone */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD);
/* Free queued messages */
RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry);
/* Free queued messages */
RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry);
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD);
/* Restart at the head */
NextEntry = ListHead->Flink;
/* Restart at the head */
NextEntry = ListHead->Flink;
/* Remove it */
RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry);
/* Remove it */
RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry);
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD);
/* Restart at the head */
NextEntry = ListHead->Flink;
/* Restart at the head */
NextEntry = ListHead->Flink;
/* Unlink and free it */
RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry);
/* Unlink and free it */
RemoveEntryList(&Message->Entry);
InitializeListHead(&Message->Entry);
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD);
IN PLPCP_MESSAGE Message,
IN ULONG LockFlags)
{
IN PLPCP_MESSAGE Message,
IN ULONG LockFlags)
{
- BOOLEAN LockHeld = (LockFlags & LPCP_LOCK_OWNED);
+ BOOLEAN LockHeld = (LockFlags & LPCP_LOCK_HELD);
Request) != LPC_REQUEST)))
{
/* It isn't, fail */
Request) != LPC_REQUEST)))
{
/* It isn't, fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port);
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port);
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* Fail */
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port);
_SEH2_YIELD(return _SEH2_GetExceptionCode());
ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port);
_SEH2_YIELD(return _SEH2_GetExceptionCode());
Request) != LPC_REQUEST)))
{
/* It isn't, fail */
Request) != LPC_REQUEST)))
{
/* It isn't, fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port);
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
ObDereferenceObject(WakeupThread);
ObDereferenceObject(Port);
if (Message->Request.u2.s2.DataInfoOffset)
{
/* It does, save it, and don't free the message below */
if (Message->Request.u2.s2.DataInfoOffset)
{
/* It does, save it, and don't free the message below */
- LpcpSaveDataInfoMessage(Port, Message, LPCP_LOCK_OWNED);
+ LpcpSaveDataInfoMessage(Port, Message, LPCP_LOCK_HELD);
if (Message)
{
/* Free it and release the lock */
if (Message)
{
/* Free it and release the lock */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
if (!ConnectionPort)
{
/* Fail */
if (!ConnectionPort)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED;
}
}
return STATUS_PORT_DISCONNECTED;
}
}
if (!ConnectionPort)
{
/* Fail */
if (!ConnectionPort)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED;
}
}
return STATUS_PORT_DISCONNECTED;
}
}
if (QueuePort)
{
/* Generate the Message ID and set it */
if (QueuePort)
{
/* Generate the Message ID and set it */
- Message->Request.MessageId = LpcpNextMessageId++;
+ Message->Request.MessageId = LpcpNextMessageId++;
if (!LpcpNextMessageId) LpcpNextMessageId = 1;
Message->Request.CallbackId = 0;
if (!LpcpNextMessageId) LpcpNextMessageId = 1;
Message->Request.CallbackId = 0;
/* Insert the message in our chain */
InsertTailList(&QueuePort->MsgQueue.ReceiveHead, &Message->Entry);
/* Insert the message in our chain */
InsertTailList(&QueuePort->MsgQueue.ReceiveHead, &Message->Entry);
- /* Release the lock and release the semaphore */
+ /* Release the lock and the semaphore */
KeEnterCriticalRegion();
KeReleaseGuardedMutex(&LpcpLock);
LpcpCompleteWait(QueuePort->MsgQueue.Semaphore);
KeEnterCriticalRegion();
KeReleaseGuardedMutex(&LpcpLock);
LpcpCompleteWait(QueuePort->MsgQueue.Semaphore);
KeSetEvent(&QueuePort->WaitEvent, IO_NO_INCREMENT, FALSE);
}
KeSetEvent(&QueuePort->WaitEvent, IO_NO_INCREMENT, FALSE);
}
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
LPCTRACE(LPC_SEND_DEBUG, "Port: %p. Message: %p\n", QueuePort, Message);
return STATUS_SUCCESS;
}
/* If we got here, then free the message and fail */
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
LPCTRACE(LPC_SEND_DEBUG, "Port: %p. Message: %p\n", QueuePort, Message);
return STATUS_SUCCESS;
}
/* If we got here, then free the message and fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
return STATUS_PORT_DISCONNECTED;
}
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
return STATUS_PORT_DISCONNECTED;
}
if (!QueuePort)
{
/* We have no connected port, fail */
if (!QueuePort)
{
/* We have no connected port, fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED;
}
return STATUS_PORT_DISCONNECTED;
}
if (!ConnectionPort)
{
/* Fail */
if (!ConnectionPort)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED;
}
}
return STATUS_PORT_DISCONNECTED;
}
}
if (!ConnectionPort)
{
/* Fail */
if (!ConnectionPort)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
return STATUS_PORT_DISCONNECTED;
}
}
return STATUS_PORT_DISCONNECTED;
}
}
Message->SenderPort = Port;
/* Generate the Message ID and set it */
Message->SenderPort = Port;
/* Generate the Message ID and set it */
- Message->Request.MessageId = LpcpNextMessageId++;
+ Message->Request.MessageId = LpcpNextMessageId++;
if (!LpcpNextMessageId) LpcpNextMessageId = 1;
Message->Request.CallbackId = 0;
if (!LpcpNextMessageId) LpcpNextMessageId = 1;
Message->Request.CallbackId = 0;
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
PLPCP_MESSAGE Message;
KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
PETHREAD Thread = PsGetCurrentThread();
PLPCP_MESSAGE Message;
KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
PETHREAD Thread = PsGetCurrentThread();
if (!QueuePort)
{
/* We have no connected port, fail */
if (!QueuePort)
{
/* We have no connected port, fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
if (!ConnectionPort)
{
/* Fail */
if (!ConnectionPort)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
if (!ConnectionPort)
{
/* Fail */
if (!ConnectionPort)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
Message->SenderPort = Port;
/* Generate the Message ID and set it */
Message->SenderPort = Port;
/* Generate the Message ID and set it */
- Message->Request.MessageId = LpcpNextMessageId++;
+ Message->Request.MessageId = LpcpNextMessageId++;
if (!LpcpNextMessageId) LpcpNextMessageId = 1;
Message->Request.CallbackId = 0;
if (!LpcpNextMessageId) LpcpNextMessageId = 1;
Message->Request.CallbackId = 0;
/* Insert the message in our chain */
InsertTailList(&QueuePort->MsgQueue.ReceiveHead, &Message->Entry);
/* Insert the message in our chain */
InsertTailList(&QueuePort->MsgQueue.ReceiveHead, &Message->Entry);
- /* Release the lock and get the semaphore we'll use later */
+ /* Release the lock and the semaphore */
KeEnterCriticalRegion();
KeReleaseGuardedMutex(&LpcpLock);
KeEnterCriticalRegion();
KeReleaseGuardedMutex(&LpcpLock);
-
- /* Now release the semaphore */
- Semaphore = QueuePort->MsgQueue.Semaphore;
- LpcpCompleteWait(Semaphore);
+ LpcpCompleteWait(QueuePort->MsgQueue.Semaphore);
/* If this is a waitable port, wake it up */
if (QueuePort->Flags & LPCP_WAITABLE_PORT)
/* If this is a waitable port, wake it up */
if (QueuePort->Flags & LPCP_WAITABLE_PORT)
Status);
/* The wait failed, free the message */
Status);
/* The wait failed, free the message */
- if (Message) LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ if (Message) LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port);
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
ObDereferenceObject(Port);
if (ConnectionPort) ObDereferenceObject(ConnectionPort);
if (!QueuePort)
{
/* We have no connected port, fail */
if (!QueuePort)
{
/* We have no connected port, fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
if (!ConnectionPort)
{
/* Fail */
if (!ConnectionPort)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
if (!ConnectionPort)
{
/* Fail */
if (!ConnectionPort)
{
/* Fail */
- LpcpFreeToPortZone(Message, LPCP_LOCK_OWNED | LPCP_LOCK_RELEASE);
+ LpcpFreeToPortZone(Message, LPCP_LOCK_HELD | LPCP_LOCK_RELEASE);
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
ObDereferenceObject(Port);
return STATUS_PORT_DISCONNECTED;
}
Message->SenderPort = Port;
/* Generate the Message ID and set it */
Message->SenderPort = Port;
/* Generate the Message ID and set it */
- Message->Request.MessageId = LpcpNextMessageId++;
+ Message->Request.MessageId = LpcpNextMessageId++;
if (!LpcpNextMessageId) LpcpNextMessageId = 1;
Message->Request.CallbackId = 0;
if (!LpcpNextMessageId) LpcpNextMessageId = 1;
Message->Request.CallbackId = 0;