-/* Copyright (c) Citrix Systems Inc.
+ /* Copyright (c) Citrix Systems Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
#include "xeniface_ioctls.h"
#include <version.h>
-__drv_raisesIRQL(APC_LEVEL)
-__drv_savesIRQLGlobal(OldIrql, fdoData->SessionLock)
void LockSessions(
XENIFACE_FDO* fdoData)
{
- ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
- ExAcquireFastMutex(&fdoData->SessionLock);
+ AcquireMutex(&fdoData->SessionLock);
}
-__drv_requiresIRQL(APC_LEVEL)
-__drv_restoresIRQLGlobal(OldIrql, fdoData->SessionLock)
void UnlockSessions(
XENIFACE_FDO* fdoData)
{
- ASSERT(KeGetCurrentIrql() == APC_LEVEL);
-#pragma prefast (suppress:26110)
- ExReleaseFastMutex(&fdoData->SessionLock);
+ ReleaseMutex(&fdoData->SessionLock);
}
void GetUnicodeString(UNICODE_STRING *unicode, USHORT maxlength, LPWSTR location)
KEVENT* watchevents[MAXIMUM_WAIT_OBJECTS];
KWAIT_BLOCK watchwaitblockarray[MAXIMUM_WAIT_OBJECTS];
KEVENT SessionChangedEvent;
- FAST_MUTEX WatchMapLock;
+ XENIFACE_MUTEX WatchMapLock;
BOOLEAN mapchanged;
BOOLEAN closing;
BOOLEAN suspended;
}
-_IRQL_raises_(APC_LEVEL)
XenStoreWatch *
SessionFindWatchLocked(XenStoreSession *session,
UNICODE_STRING *path) {
XenStoreWatch * watch;
XenIfaceDebugPrint(TRACE,"Wait for session watch lock\n");
- ExAcquireFastMutex(&session->WatchMapLock);
+ AcquireMutex(&session->WatchMapLock);
XenIfaceDebugPrint(TRACE,"got session watch lock\n");
watch = (XenStoreWatch *)session->watches.Flink;
XenStoreSession * session = (XenStoreSession*) StartContext;
for(;;) {
- ExAcquireFastMutex(&session->WatchMapLock);
+ AcquireMutex(&session->WatchMapLock);
if (session->mapchanged) {
// Construct a new mapping
XenStoreWatch *watch;
session->mapchanged = FALSE;
session->watchevents[i] = &session->SessionChangedEvent;
}
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
XenIfaceDebugPrint(TRACE,"Wait for new event\n");
status = KeWaitForMultipleObjects(i+1, session->watchevents, WaitAny, Executive, KernelMode, TRUE, NULL, session->watchwaitblockarray);
XenIfaceDebugPrint(TRACE,"got new event\n");
XenStoreWatch *watch;
XenIfaceDebugPrint(TRACE,"watch or suspend\n");
watch = CONTAINING_RECORD(session->watchevents[status-STATUS_WAIT_0], XenStoreWatch, watchevent );
- ExAcquireFastMutex(&session->WatchMapLock);
+ AcquireMutex(&session->WatchMapLock);
KeClearEvent(&watch->watchevent);
} else {
FireWatch(watch);
}
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
}
else if ( status == STATUS_WAIT_0 + i) {
- ExAcquireFastMutex(&session->WatchMapLock);
+ AcquireMutex(&session->WatchMapLock);
KeClearEvent(&session->SessionChangedEvent);
if (session->closing==TRUE) {
XenIfaceDebugPrint(TRACE,"Trying to end session thread\n");
session->watchcount --;
}
}
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
XenIfaceDebugPrint(TRACE,"Ending session thread\n");
PsTerminateSystemThread(STATUS_SUCCESS);
- //ExReleaseFastMutex(&session->WatchMapLock);
+ //ReleaseMutex(&session->WatchMapLock);
}
else {
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
}
}
return STATUS_INSUFFICIENT_RESOURCES;
}
- ExAcquireFastMutex(&session->WatchMapLock);
+ AcquireMutex(&session->WatchMapLock);
session->mapchanged = TRUE;
KeSetEvent(&session->SessionChangedEvent, IO_NO_INCREMENT,FALSE);
session->watchcount++;
}
XenIfaceDebugPrint(TRACE, "WATCHLIST-------------------\n");
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
return STATUS_SUCCESS;
}
XenStoreWatch *watch;
XenIfaceDebugPrint(TRACE, "wait remove mutex\n");
- ExAcquireFastMutex(&session->WatchMapLock);
+ AcquireMutex(&session->WatchMapLock);
for (watch = (XenStoreWatch *)session->watches.Flink;
watch!=(XenStoreWatch *)&session->watches;
watch=(XenStoreWatch *)watch->listentry.Flink) {
SessionRemoveWatchLocked(session, watch);
}
XenIfaceDebugPrint(TRACE, "release remove mutex\n");
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
}
__checkReturn
__success(return!=NULL)
-__drv_raisesIRQL(APC_LEVEL)
-__drv_savesIRQLGlobal(OldIrql, fdoData->SessionLock)
XenStoreSession *
FindSessionByInstanceAndLock(XENIFACE_FDO *fdoData,
UNICODE_STRING *instance) {
return STATUS_INSUFFICIENT_RESOURCES;
RtlZeroMemory(session, sizeof(XenStoreSession));
- ExInitializeFastMutex(&session->WatchMapLock);
+ InitializeMutex(&session->WatchMapLock);
session->mapchanged = TRUE;
status = RtlUnicodeStringToAnsiString(&ansi, stringid, TRUE);
if (!NT_SUCCESS(status)) {
{
int i;
XenStoreWatch *watch;
- ExAcquireFastMutex(&session->WatchMapLock);
+ AcquireMutex(&session->WatchMapLock);
watch = (XenStoreWatch *)session->watches.Flink;
for (i=0; watch != (XenStoreWatch *)&session->watches; i++) {
XenIfaceDebugPrint(TRACE,"Suspend unwatch %p\n", watch->watchhandle);
}
XenIfaceDebugPrint(TRACE, "WATCHLIST-------------------\n");
session->suspended=1;
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
}
void SuspendSessionLocked(XENIFACE_FDO *fdoData,
void SessionRenewWatchesLocked(XenStoreSession *session) {
int i;
XenStoreWatch *watch;
- ExAcquireFastMutex(&session->WatchMapLock);
+ AcquireMutex(&session->WatchMapLock);
watch = (XenStoreWatch *)session->watches.Flink;
for (i=0; watch != (XenStoreWatch *)&session->watches; i++) {
if (!watch->finished) {
session->suspended=0;
session->mapchanged = TRUE;
KeSetEvent(&session->SessionChangedEvent, IO_NO_INCREMENT,FALSE);
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
}
void ResumeSessionLocked(XENIFACE_FDO *fdoData,
XenIfaceDebugPrint(WARNING, "No Watch\n");
}
#pragma prefast (suppress:26110)
- ExReleaseFastMutex(&session->WatchMapLock);
+ ReleaseMutex(&session->WatchMapLock);
UnlockSessions(fdoData);
*byteswritten=0;
Fdo->Sessions = 0;
InitializeListHead(&Fdo->SessionHead);
- ExInitializeFastMutex(&Fdo->SessionLock);
+ InitializeMutex(&Fdo->SessionLock);
return STATUS_SUCCESS;