]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
lib/lock: continue to backout changes and adapt
authorVMware, Inc <>
Mon, 21 Nov 2011 23:29:15 +0000 (15:29 -0800)
committerMarcelo Vanzin <mvanzin@vmware.com>
Mon, 21 Nov 2011 23:29:15 +0000 (15:29 -0800)
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 <mvanzin@vmware.com>
open-vm-tools/lib/lock/ul.c
open-vm-tools/lib/lock/ulBarrier.c
open-vm-tools/lib/lock/ulExcl.c
open-vm-tools/lib/lock/ulInt.h
open-vm-tools/lib/lock/ulRW.c
open-vm-tools/lib/lock/ulRec.c
open-vm-tools/lib/lock/ulSema.c

index cfe52464871d1df8c884ec369f87ffe362be5fce..6073681726ee34f1bb5d49625c8044d62bfee8ba 100644 (file)
@@ -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;
-}
-
-
 /*
  *-----------------------------------------------------------------------------
  *
index 861b8544bc8557f8e91a1dc4d0e380c91f3eb6b5..8f32ef60bf405b86a6da4ea9da53cdfa54df3afd 100644 (file)
@@ -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);
index 47f1563d9edbf2ef47e7204dd22f752ba478f3e5..1aaea1bd72a9dc5b8fee8e1f2350ffbd04ae2453 100644 (file)
@@ -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);
 
index e651669a8162ea8ac19731d2aaa6cc1b92fe40bf..58349971732a8f324aed188798e15b0eb13c8d34 100644 (file)
@@ -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);
index eab17762f8a6328cd5e9f97c5fb560871d71293d..9e31253bd49a156464670da5791a177ea543e8e2 100644 (file)
@@ -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);
index 86b07cafb028f988b087beee9d7040df986747eb..0da8c2aaaa29983b42bb20a2e9bec0b4eedd3495 100644 (file)
@@ -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();
index 7d22d539ab0b6def8e0eb03e63005ae46b150a9a..992a69e4a0963cbcc6186a769b0f9d1ae2674e35 100644 (file)
@@ -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);