From: VMware, Inc <> Date: Mon, 21 Nov 2011 23:29:15 +0000 (-0800) Subject: lib/lock: continue to backout changes and adapt X-Git-Tag: 2011.11.20-535097~34 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fdec13e13e081ca2f705e6066e697f2627fe1d76;p=thirdparty%2Fopen-vm-tools.git lib/lock: continue to backout changes and adapt Almost there, almost there... I'm taking things back to a point that the run-time checking can be done and not create the hanging/crashing problems. Signed-off-by: Marcelo Vanzin --- diff --git a/open-vm-tools/lib/lock/ul.c b/open-vm-tools/lib/lock/ul.c index cfe524648..607368172 100644 --- a/open-vm-tools/lib/lock/ul.c +++ b/open-vm-tools/lib/lock/ul.c @@ -490,72 +490,6 @@ MXUserValidateHeader(MXUserHeader *header, // IN: #endif -/* - *----------------------------------------------------------------------------- - * - * MXUserSetSignature -- - * - * Set the signature of an MXUser object header - * - * A release build does not validate signatures but it does generate - * them; should a release build lock get to debug build code the debug - * build code will notice. - * - * A debug build generates and validates signatures. It will detect - * problems with its own locks and lock problems for any other source. - * - * Dynamically altering the lock signature at run time allows the - * run time code to detect that a lock "owned" by one library has - * leaked and is being manipulated by another library. Even if the - * libraries were compatible/identical that the lock escaped is a - * problem. - * - * Results: - * As above. - * - * Side effects: - * None - * - *----------------------------------------------------------------------------- - */ - -void -MXUserSetSignature(MXUserHeader *header, // IN/OUT: - uint32 objectID) // IN: -{ - ASSERT(header); - -#if defined(MXUSER_DEBUG) - header->signature = objectID; // TODO: use objectID + (unique) syndrome -#else - header->signature = objectID; -#endif -} - - -/* - *----------------------------------------------------------------------------- - * - * MXUserClearSignature -- - * - * Remove any sign of a valid signature - * - * Results: - * As above. - * - * Side effects: - * None - * - *----------------------------------------------------------------------------- - */ - -void -MXUserClearSignature(MXUserHeader *header) // IN/OUT: -{ - header->signature = 0; -} - - /* *----------------------------------------------------------------------------- * diff --git a/open-vm-tools/lib/lock/ulBarrier.c b/open-vm-tools/lib/lock/ulBarrier.c index 861b8544b..8f32ef60b 100644 --- a/open-vm-tools/lib/lock/ulBarrier.c +++ b/open-vm-tools/lib/lock/ulBarrier.c @@ -156,7 +156,7 @@ MXUser_CreateBarrier(const char *userName, // IN: shall be known as barrier->configCount = count; barrier->curContext = 0; - MXUserSetSignature(&barrier->header, MXUSER_BARRIER_SIGNATURE); + barrier->header.signature = MXUSER_BARRIER_SIGNATURE; barrier->header.name = properName; barrier->header.rank = rank; barrier->header.serialNumber = MXUserAllocSerialNumber(); @@ -198,13 +198,14 @@ MXUser_DestroyBarrier(MXUserBarrier *barrier) // IN: __FUNCTION__); } + barrier->header.signature = 0; // just in case... + MXUserRemoveFromList(&barrier->header); MXUser_DestroyCondVar(barrier->contexts[0].condVar); MXUser_DestroyCondVar(barrier->contexts[1].condVar); MXUser_DestroyExclLock(barrier->lock); - MXUserClearSignature(&barrier->header); // just in case... free(barrier->header.name); barrier->header.name = NULL; free(barrier); diff --git a/open-vm-tools/lib/lock/ulExcl.c b/open-vm-tools/lib/lock/ulExcl.c index 47f1563d9..1aaea1bd7 100644 --- a/open-vm-tools/lib/lock/ulExcl.c +++ b/open-vm-tools/lib/lock/ulExcl.c @@ -303,7 +303,7 @@ MXUser_CreateExclLock(const char *userName, // IN: return NULL; } - MXUserSetSignature(&lock->header, MXUSER_EXCL_SIGNATURE); + lock->header.signature = MXUSER_EXCL_SIGNATURE; lock->header.name = properName; lock->header.rank = rank; lock->header.serialNumber = MXUserAllocSerialNumber(); @@ -352,7 +352,7 @@ MXUser_DestroyExclLock(MXUserExclLock *lock) // IN: __FUNCTION__); } - MXUserClearSignature(&lock->header); // just in case... + lock->header.signature = 0; // just in case... MXRecLockDestroy(&lock->recursiveLock); diff --git a/open-vm-tools/lib/lock/ulInt.h b/open-vm-tools/lib/lock/ulInt.h index e651669a8..583499717 100644 --- a/open-vm-tools/lib/lock/ulInt.h +++ b/open-vm-tools/lib/lock/ulInt.h @@ -417,11 +417,6 @@ void MXUserDumpAndPanic(MXUserHeader *header, MXRecLock *MXUserInternalSingleton(Atomic_Ptr *storage); -void MXUserSetSignature(MXUserHeader *header, - uint32 objectID); - -void MXUserClearSignature(MXUserHeader *header); - #if defined(MXUSER_DEBUG) void MXUserAcquisitionTracking(MXUserHeader *header, Bool checkRank); diff --git a/open-vm-tools/lib/lock/ulRW.c b/open-vm-tools/lib/lock/ulRW.c index eab17762f..9e31253bd 100644 --- a/open-vm-tools/lib/lock/ulRW.c +++ b/open-vm-tools/lib/lock/ulRW.c @@ -531,7 +531,7 @@ MXUser_CreateRWLock(const char *userName, // IN: properName = Util_SafeStrdup(userName); } - MXUserSetSignature(&lock->header, MXUSER_RW_SIGNATURE); + lock->header.signature = MXUSER_RW_SIGNATURE; lock->header.name = properName; lock->header.rank = rank; lock->header.serialNumber = MXUserAllocSerialNumber(); @@ -604,8 +604,6 @@ MXUser_DestroyRWLock(MXUserRWLock *lock) // IN: __FUNCTION__); } - MXUserClearSignature(&lock->header); // just in case... - if (LIKELY(lock->useNative)) { int err = MXUserNativeRWDestroy(&lock->nativeLock); @@ -615,6 +613,8 @@ MXUser_DestroyRWLock(MXUserRWLock *lock) // IN: } } + lock->header.signature = 0; // just in case... + MXRecLockDestroy(&lock->recursiveLock); MXUserRemoveFromList(&lock->header); diff --git a/open-vm-tools/lib/lock/ulRec.c b/open-vm-tools/lib/lock/ulRec.c index 86b07cafb..0da8c2aaa 100644 --- a/open-vm-tools/lib/lock/ulRec.c +++ b/open-vm-tools/lib/lock/ulRec.c @@ -335,7 +335,7 @@ MXUserCreateRecLock(const char *userName, // IN: lock->vmmLock = NULL; Atomic_Write(&lock->refCount, 1); - MXUserSetSignature(&lock->header, MXUSER_REC_SIGNATURE); + lock->header.signature = MXUSER_REC_SIGNATURE; lock->header.name = properName; lock->header.rank = rank; lock->header.serialNumber = MXUserAllocSerialNumber(); @@ -462,7 +462,7 @@ MXUserCondDestroyRecLock(MXUserRecLock *lock) // IN: } } - MXUserClearSignature(&lock->header); // just in case... + lock->header.signature = 0; // just in case... free(lock->header.name); lock->header.name = NULL; free(lock); @@ -1016,7 +1016,7 @@ MXUser_BindMXMutexRec(struct MX_MutexRec *mutex, // IN: lock = Util_SafeCalloc(1, sizeof(*lock)); - MXUserSetSignature(&lock->header, MXUSER_REC_SIGNATURE); + lock->header.signature = MXUSER_REC_SIGNATURE; lock->header.name = Str_SafeAsprintf(NULL, "MX_%p", mutex); lock->header.rank = rank; lock->header.serialNumber = MXUserAllocSerialNumber(); diff --git a/open-vm-tools/lib/lock/ulSema.c b/open-vm-tools/lib/lock/ulSema.c index 7d22d539a..992a69e4a 100644 --- a/open-vm-tools/lib/lock/ulSema.c +++ b/open-vm-tools/lib/lock/ulSema.c @@ -515,7 +515,7 @@ MXUser_CreateSemaphore(const char *userName, // IN: if (LIKELY(MXUserInit(&sema->nativeSemaphore) == 0)) { MXUserStats *stats; - MXUserSetSignature(&sema->header, MXUSER_SEMA_SIGNATURE); + sema->header.signature = MXUSER_SEMA_SIGNATURE; sema->header.name = properName; sema->header.rank = rank; sema->header.serialNumber = MXUserAllocSerialNumber(); @@ -576,8 +576,6 @@ MXUser_DestroySemaphore(MXUserSemaphore *sema) // IN: __FUNCTION__); } - MXUserClearSignature(&sema->header); // just in case... - err = MXUserDestroy(&sema->nativeSemaphore); if (UNLIKELY(err != 0)) { @@ -585,6 +583,8 @@ MXUser_DestroySemaphore(MXUserSemaphore *sema) // IN: __FUNCTION__, err); } + sema->header.signature = 0; // just in case... + MXUserRemoveFromList(&sema->header); stats = (MXUserStats *) Atomic_ReadPtr(&sema->statsMem);