#include "userlock.h"
#include "ulInt.h"
-#define MXUSER_BARRIER_SIGNATURE 0x52524142 // 'BARR' in memory
-
struct BarrierContext
{
uint32 count; // Number of threads currently in this context
barrier->configCount = count;
barrier->curContext = 0;
- barrier->header.signature = MXUSER_BARRIER_SIGNATURE;
+ barrier->header.signature = MXUSER_TYPE_BARRIER;
barrier->header.name = properName;
barrier->header.rank = rank;
barrier->header.serialNumber = MXUserAllocSerialNumber();
MXUser_DestroyBarrier(MXUserBarrier *barrier) // IN:
{
if (LIKELY(barrier != NULL)) {
- MXUserValidateHeader(&barrier->header, MXUSER_BARRIER_SIGNATURE);
+ MXUserValidateHeader(&barrier->header, MXUSER_TYPE_BARRIER);
if ((barrier->contexts[0].count != 0) ||
(barrier->contexts[1].count != 0)) {
uint32 context;
ASSERT(barrier);
- MXUserValidateHeader(&barrier->header, MXUSER_BARRIER_SIGNATURE);
+ MXUserValidateHeader(&barrier->header, MXUSER_TYPE_BARRIER);
MXUser_AcquireExclLock(barrier->lock);
#endif
};
-#define MXUSER_CONDVAR_SIGNATURE 0x444E4F43 // 'COND' in memory
-
#if defined(_WIN32)
typedef VOID (WINAPI *InitializeConditionVariableFn)(PCONDITION_VARIABLE cv);
typedef BOOL (WINAPI *SleepConditionVariableCSFn)(PCONDITION_VARIABLE cv,
MXUserCondVar *condVar = Util_SafeCalloc(1, sizeof(*condVar));
if (MXUserCreateInternal(condVar)) {
- condVar->signature = MXUSER_CONDVAR_SIGNATURE;
+ condVar->signature = MXUSER_TYPE_CONDVAR;
condVar->header = header;
condVar->ownerLock = lock;
} else {
{
ASSERT(header);
ASSERT(lock);
- ASSERT(condVar && (condVar->signature == MXUSER_CONDVAR_SIGNATURE));
+ ASSERT(condVar && (condVar->signature == MXUSER_TYPE_CONDVAR));
if (condVar->ownerLock != lock) {
Panic("%s: invalid use of lock %s with condVar (%p; %s)\n",
{
int err;
- ASSERT(condVar && (condVar->signature == MXUSER_CONDVAR_SIGNATURE));
+ ASSERT(condVar && (condVar->signature == MXUSER_TYPE_CONDVAR));
err = MXUserSignalInternal(condVar);
{
int err;
- ASSERT(condVar && (condVar->signature == MXUSER_CONDVAR_SIGNATURE));
+ ASSERT(condVar && (condVar->signature == MXUSER_TYPE_CONDVAR));
err = MXUserBroadcastInternal(condVar);
MXUser_DestroyCondVar(MXUserCondVar *condVar) // IN:
{
if (condVar != NULL) {
- ASSERT(condVar->signature == MXUSER_CONDVAR_SIGNATURE);
+ ASSERT(condVar->signature == MXUSER_TYPE_CONDVAR);
if (Atomic_Read(&condVar->referenceCount) != 0) {
Panic("%s: Attempted destroy on active condVar (%p; %s)\n",
#include "ulInt.h"
#include "vm_atomic.h"
-#define MXUSER_EXCL_SIGNATURE 0x58454B4C // 'LKEX' in memory
-
typedef struct
{
MXUserAcquisitionStats acquisitionStats;
Bool result;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
switch (command) {
case MXUSER_CONTROL_ACQUISITION_HISTO: {
return NULL;
}
- lock->header.signature = MXUSER_EXCL_SIGNATURE;
+ lock->header.signature = MXUSER_TYPE_EXCL;
lock->header.name = properName;
lock->header.rank = rank;
lock->header.serialNumber = MXUserAllocSerialNumber();
if (lock != NULL) {
MXUserStats *stats;
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
if (MXRecLockCount(&lock->recursiveLock) > 0) {
MXUserDumpAndPanic(&lock->header,
MXUserStats *stats;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
stats = (MXUserStats *) Atomic_ReadPtr(&lock->statsMem);
MXUserStats *stats;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
stats = (MXUserStats *) Atomic_ReadPtr(&lock->statsMem);
MXUserStats *stats;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
if (MXUserTryAcquireFail(lock->header.name)) {
return FALSE;
MXUser_IsCurThreadHoldingExclLock(MXUserExclLock *lock) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
return MXRecLockIsOwner(&lock->recursiveLock);
}
MXUser_CreateCondVarExclLock(MXUserExclLock *lock)
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
return MXUserCreateCondVar(&lock->header, &lock->recursiveLock);
}
MXUserCondVar *condVar) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
MXUserWaitCondVar(&lock->header, &lock->recursiveLock, condVar,
MXUSER_WAIT_INFINITE);
uint32 msecWait) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_EXCL_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_EXCL);
MXUserWaitCondVar(&lock->header, &lock->recursiveLock, condVar, msecWait);
}
return (void *) (uintptr_t) VThread_CurID(); // unsigned
}
+#define MXUSER_TYPE_RW 0x57524B4C // 'LKRW' in memory
+#define MXUSER_TYPE_REC 0x43524B4C // 'LKRC' in memory
+#define MXUSER_TYPE_RANK 0x4E4B5241 // 'RANK' in memory
+#define MXUSER_TYPE_EXCL 0x58454B4C // 'LKEX' in memory
+#define MXUSER_TYPE_SEMA 0x414D4553 // 'SEMA' in memory
+#define MXUSER_TYPE_CONDVAR 0x444E4F43 // 'COND' in memory
+#define MXUSER_TYPE_BARRIER 0x52524142 // 'BARR' in memory
/*
* MXUser header - all MXUser objects start with this
#include "hostinfo.h"
#include "ulInt.h"
-#define MXUSER_RW_SIGNATURE 0x57524B4C // 'LKRW' in memory
-
static void
MXUserFreeHashEntry(void *data) // IN:
{
Bool result;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_RW_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_RW);
switch (command) {
case MXUSER_CONTROL_ACQUISITION_HISTO: {
properName = Util_SafeStrdup(userName);
}
- lock->header.signature = MXUSER_RW_SIGNATURE;
+ lock->header.signature = MXUSER_TYPE_RW;
lock->header.name = properName;
lock->header.rank = rank;
lock->header.serialNumber = MXUserAllocSerialNumber();
if (LIKELY(lock != NULL)) {
MXUserStats *stats;
- MXUserValidateHeader(&lock->header, MXUSER_RW_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_RW);
if (Atomic_Read(&lock->holderCount) != 0) {
MXUserDumpAndPanic(&lock->header,
HolderContext *myContext;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_RW_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_RW);
MXUserAcquisitionTracking(&lock->header, TRUE);
HolderContext *myContext;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_RW_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_RW);
myContext = MXUserGetHolderContext(lock);
HolderContext *myContext;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_RW_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_RW);
myContext = MXUserGetHolderContext(lock);
Atomic_Ptr heldHisto;
} MXUserStats;
-#define MXUSER_REC_SIGNATURE 0x43524B4C // 'LKRC' in memory
-
struct MXUserRecLock
{
MXUserHeader header;
Bool result;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
Atomic_Inc(&lock->refCount);
lock->vmmLock = NULL;
Atomic_Write(&lock->refCount, 1);
- lock->header.signature = MXUSER_REC_SIGNATURE;
+ lock->header.signature = MXUSER_TYPE_REC;
lock->header.name = properName;
lock->header.rank = rank;
lock->header.serialNumber = MXUserAllocSerialNumber();
MXUserCondDestroyRecLock(MXUserRecLock *lock) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
if (Atomic_FetchAndDec(&lock->refCount) == 1) {
if (lock->vmmLock == NULL) {
MXUser_AcquireRecLock(MXUserRecLock *lock) // IN/OUT:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
Atomic_Inc(&lock->refCount);
MXUser_ReleaseRecLock(MXUserRecLock *lock) // IN/OUT:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
Atomic_Inc(&lock->refCount);
Bool success;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
Atomic_Inc(&lock->refCount);
Bool result;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
Atomic_Inc(&lock->refCount);
MXUserCondVar *condVar;
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
ASSERT(lock->vmmLock == NULL); // only unbound locks
Atomic_Inc(&lock->refCount);
MXUserCondVar *condVar) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
ASSERT(lock->vmmLock == NULL); // only unbound locks
Atomic_Inc(&lock->refCount);
uint32 msecWait) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
ASSERT(lock->vmmLock == NULL); // only unbound locks
Atomic_Inc(&lock->refCount);
MXUser_DumpRecLock(MXUserRecLock *lock) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
Atomic_Inc(&lock->refCount);
MXUser_GetRecLockVmm(MXUserRecLock *lock) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
return lock->vmmLock;
}
MXUser_GetRecLockRank(MXUserRecLock *lock) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
return lock->header.rank;
}
lock = Util_SafeCalloc(1, sizeof(*lock));
- lock->header.signature = MXUSER_REC_SIGNATURE;
+ lock->header.signature = MXUSER_TYPE_REC;
lock->header.name = Str_SafeAsprintf(NULL, "MX_%p", mutex);
lock->header.rank = rank;
lock->header.serialNumber = MXUserAllocSerialNumber();
MXUser_IncRefRecLock(MXUserRecLock *lock) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
Atomic_Inc(&lock->refCount);
}
MXUser_DecRefRecLock(MXUserRecLock *lock) // IN:
{
ASSERT(lock);
- MXUserValidateHeader(&lock->header, MXUSER_REC_SIGNATURE);
+ MXUserValidateHeader(&lock->header, MXUSER_TYPE_REC);
MXUserCondDestroyRecLock(lock);
}
#include "win32u.h"
#endif
-#define MXUSER_SEMA_SIGNATURE 0x414D4553 // 'SEMA' in memory
#define MXUSER_A_BILLION (1000 * 1000 * 1000)
#if defined(_WIN32)
if (LIKELY(MXUserInit(&sema->nativeSemaphore) == 0)) {
MXUserStats *stats;
- sema->header.signature = MXUSER_SEMA_SIGNATURE;
+ sema->header.signature = MXUSER_TYPE_SEMA;
sema->header.name = properName;
sema->header.rank = rank;
sema->header.serialNumber = MXUserAllocSerialNumber();
int err;
MXUserStats *stats;
- MXUserValidateHeader(&sema->header, MXUSER_SEMA_SIGNATURE);
+ MXUserValidateHeader(&sema->header, MXUSER_TYPE_SEMA);
if (Atomic_Read(&sema->activeUserCount) != 0) {
MXUserDumpAndPanic(&sema->header,
MXUserStats *stats;
ASSERT(sema);
- MXUserValidateHeader(&sema->header, MXUSER_SEMA_SIGNATURE);
+ MXUserValidateHeader(&sema->header, MXUSER_TYPE_SEMA);
Atomic_Inc(&sema->activeUserCount);
Bool downOccurred = FALSE;
ASSERT(sema);
- MXUserValidateHeader(&sema->header, MXUSER_SEMA_SIGNATURE);
+ MXUserValidateHeader(&sema->header, MXUSER_TYPE_SEMA);
Atomic_Inc(&sema->activeUserCount);
Bool downOccurred = FALSE;
ASSERT(sema);
- MXUserValidateHeader(&sema->header, MXUSER_SEMA_SIGNATURE);
+ MXUserValidateHeader(&sema->header, MXUSER_TYPE_SEMA);
Atomic_Inc(&sema->activeUserCount);
int err;
ASSERT(sema);
- MXUserValidateHeader(&sema->header, MXUSER_SEMA_SIGNATURE);
+ MXUserValidateHeader(&sema->header, MXUSER_TYPE_SEMA);
Atomic_Inc(&sema->activeUserCount);