]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
lib/lock: A nice improvement
authorVMware, Inc <>
Mon, 21 Nov 2011 23:37:09 +0000 (15:37 -0800)
committerMarcelo Vanzin <mvanzin@vmware.com>
Mon, 21 Nov 2011 23:37:09 +0000 (15:37 -0800)
. Don't use a bunch of defines.
. Add checking for potential serial number roll overs.

Signed-off-by: Marcelo Vanzin <mvanzin@vmware.com>
open-vm-tools/lib/lock/ul.c
open-vm-tools/lib/lock/ulInt.h

index 2bedd7575e3ac813e789a645b4485a58d6d068d7..b906ddc297aaa7b1584045a6e1999fa61078dfb2 100644 (file)
@@ -157,11 +157,11 @@ MXUserSyndrome(void)
  */
 
 uint32
-MXUserGetSignature(uint32 objectType)  // IN:
+MXUserGetSignature(MXUserObjectType objectType)  // IN:
 {
    uint32 signature;
 
-   ASSERT(objectType < 16);  // 4 bits of object type
+   ASSERT((objectType != 0) && (objectType < 16));
 
    signature = (MXUserSyndrome() & 0x0FFFFFFF) | (objectType << 28);
    ASSERT(signature);
@@ -563,14 +563,19 @@ MXUser_TryAcquireFailureControl(Bool (*func)(const char *name))  // IN:
  */
 
 void
-MXUserValidateHeader(MXUserHeader *header,  // IN:
-                     uint32 objectType)     // IN:
+MXUserValidateHeader(MXUserHeader *header,         // IN:
+                     MXUserObjectType objectType)  // IN:
 {
    uint32 expected = MXUserGetSignature(objectType);
 
    if (header->signature != expected) {
-      MXUserDumpAndPanic(header, "%s: expected %X observed %X\n", __FUNCTION__,
-                         expected, header->signature);
+      MXUserDumpAndPanic(header,
+                         "%s: signature failure! expected %X observed %X\n",
+                         __FUNCTION__, expected, header->signature);
+   }
+
+   if (header->serialNumber == 0) {
+      MXUserDumpAndPanic(header, "%s: Invalid serial number!", __FUNCTION__);
    }
 }
 #endif
index 61fa6e88b62ce56fae10ef60a77a6f09adf6463f..a3da3b9664bdeac0e025ff62690b8d0fd70c0c28 100644 (file)
@@ -392,16 +392,18 @@ MXUserGetThreadID(void)
 }
 
 /*
- * MXUser object type ID value. They must never be zero!
+ * MXUser object type ID values.
  */
 
-#define MXUSER_TYPE_RW      0x1
-#define MXUSER_TYPE_REC     0x2
-#define MXUSER_TYPE_RANK    0x3
-#define MXUSER_TYPE_EXCL    0x4
-#define MXUSER_TYPE_SEMA    0x5
-#define MXUSER_TYPE_CONDVAR 0x6
-#define MXUSER_TYPE_BARRIER 0x7
+typedef enum {
+   MXUSER_TYPE_RW = 1,  // *MUST* *NEVER* start at zero
+   MXUSER_TYPE_REC,
+   MXUSER_TYPE_RANK,
+   MXUSER_TYPE_EXCL,
+   MXUSER_TYPE_SEMA,
+   MXUSER_TYPE_CONDVAR,
+   MXUSER_TYPE_BARRIER
+} MXUserObjectType;
 
 /*
  * MXUser header - all MXUser objects start with this
@@ -428,7 +430,7 @@ void MXUserDumpAndPanic(MXUserHeader *header,
 
 MXRecLock *MXUserInternalSingleton(Atomic_Ptr *storage);
 
-uint32 MXUserGetSignature(uint32 objectType);
+uint32 MXUserGetSignature(MXUserObjectType objectType);
 
 #if defined(MXUSER_DEBUG)
 void MXUserAcquisitionTracking(MXUserHeader *header,
@@ -437,7 +439,7 @@ void MXUserAcquisitionTracking(MXUserHeader *header,
 void MXUserReleaseTracking(MXUserHeader *header);
 
 void MXUserValidateHeader(MXUserHeader *header,
-                          uint32 objectType);
+                          MXUserObjectType objectType);
 #else
 static INLINE void
 MXUserAcquisitionTracking(MXUserHeader *header,  // IN:
@@ -453,8 +455,8 @@ MXUserReleaseTracking(MXUserHeader *header)  // IN:
 }
 
 static INLINE void
-MXUserValidateHeader(MXUserHeader *header,  // IN:
-                     uint32 objectType)     // IN:
+MXUserValidateHeader(MXUserHeader *header,     // IN:
+                     MXUserObject objectType)  // IN:
 {
    return;
 }