From: VMware, Inc <> Date: Thu, 22 Dec 2011 00:10:12 +0000 (-0800) Subject: lib/lock: access violation X-Git-Tag: 2011.12.20-562307~56 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=559727444291d2734273c3d4adae7a9662ccdd73;p=thirdparty%2Fopen-vm-tools.git lib/lock: access violation Signed-off-by: Marcelo Vanzin --- diff --git a/open-vm-tools/lib/lock/ul.c b/open-vm-tools/lib/lock/ul.c index 5c4c4e397..2ad7b782d 100644 --- a/open-vm-tools/lib/lock/ul.c +++ b/open-vm-tools/lib/lock/ul.c @@ -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 } diff --git a/open-vm-tools/lib/lock/ulInt.h b/open-vm-tools/lib/lock/ulInt.h index c62b7c7a3..0e620b576 100644 --- a/open-vm-tools/lib/lock/ulInt.h +++ b/open-vm-tools/lib/lock/ulInt.h @@ -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 } /*