]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
lib/lock: access violation
authorVMware, Inc <>
Thu, 22 Dec 2011 00:10:12 +0000 (16:10 -0800)
committerMarcelo Vanzin <mvanzin@vmware.com>
Thu, 22 Dec 2011 00:10:12 +0000 (16:10 -0800)
Signed-off-by: Marcelo Vanzin <mvanzin@vmware.com>
open-vm-tools/lib/lock/ul.c
open-vm-tools/lib/lock/ulInt.h

index 5c4c4e3973000a1be7485df52d518f2bf1aa2f45..2ad7b782df354292e75d65e95ab517c5dd5d40c8 100644 (file)
@@ -406,10 +406,6 @@ typedef struct {
 
 static Atomic_Ptr hashTableMem;
 
-#if defined(_WIN32) && !defined(VMX86_VMX)
-static Atomic_Ptr hashLockMem;
-#endif
-
 
 /*
  *-----------------------------------------------------------------------------
@@ -439,18 +435,8 @@ MXUserGetPerThread(void *tid,      // IN: thread ID
    HashTable *hash;
    MXUserPerThread *perThread = NULL;
 
-#if defined(_WIN32) && !defined(VMX86_VMX)
-   MXRecLock *hashLock = MXUserInternalSingleton(&hashLockMem);
-
-   ASSERT(hashLock);
-
-   hash = HashTable_AllocOnce(&hashTableMem, 1024, HASH_INT_KEY, NULL);
-
-   MXRecLockAcquire(hashLock);
-#else
    hash = HashTable_AllocOnce(&hashTableMem, 1024,
                               HASH_INT_KEY | HASH_FLAG_ATOMIC, NULL);
-#endif
 
    if (!HashTable_Lookup(hash, tid, (void **) &perThread)) {
       /* No entry for this tid was found, allocate one? */
@@ -476,10 +462,6 @@ MXUserGetPerThread(void *tid,      // IN: thread ID
       }
    }
 
-#if defined(_WIN32) && !defined(VMX86_VMX)
-   MXRecLockRelease(hashLock);
-#endif
-
    return perThread;
 }
 
@@ -762,34 +744,6 @@ MXUserReleaseTracking(MXUserHeader *header)  // IN: lock, via its header
 
    perThread->lockArray[lastEntry] = NULL;  // tidy up memory
    perThread->locksHeld--;
-
-#if defined(_WIN32) && !defined(VMX86_VMX)
-   /*
-    * On Windows thread IDs aren't greedily recycled. If a process creates and
-    * destroys many threads this can cause a memory leak of perThread data
-    * (and its overhead). We avoid this by atomically (via a lock) creating
-    * (upon first lock acquired) and deleting (upon last lock release) a
-    * perThread.
-    *
-    * Yes, this is a performance cost but it only affects Windows debug
-    * builds and then not by very much - we tend to run for a long time
-    * with either no locks held or at least one lock held.
-    */
-
-   if (perThread->locksHeld == 0) {
-      HashTable *hash = Atomic_ReadPtr(&hashTableMem);
-      MXRecLock *hashLock = MXUserInternalSingleton(&hashLockMem);
-
-      ASSERT(hash);
-      ASSERT(hashLock);
-
-      MXRecLockAcquire(hashLock);
-      HashTable_Delete(hash, tid);
-      MXRecLockRelease(hashLock);
-
-      free(perThread);
-   }
-#endif
 }
 
 
index c62b7c7a316e8f3b5455e0db9073104f93c93bcd..0e620b576dba08a66a8bdbf4a70eb793b2bbcd7e 100644 (file)
@@ -389,22 +389,7 @@ MXRecLockRelease(MXRecLock *lock)  // IN/OUT:
 static INLINE void *
 MXUserGetThreadID(void)
 {
-#if defined(_WIN32)
-   /*
-    * On Windows there is a problem with using VThread_CurID() - it doesn't
-    * maintain unique thread ID values (PR 780775). Native thread ID values
-    * and special handling are used to resolve issues.
-    */
-
-   return (void *) (uintptr_t) GetCurrentThreadId();  // DWORD
-#else
-   /*
-    * Outside of Windows there are no known issues with using VThread_CurID
-    * so that is what is used.
-    */
-
    return (void *) (uintptr_t) VThread_CurID();  // unsigned
-#endif
 }
 
 /*