windows-add-tid-to-mutex-20050827
authorJeffrey Altman <jaltman@secure-endpoints.com>
Sun, 28 Aug 2005 04:32:44 +0000 (04:32 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Sun, 28 Aug 2005 04:32:44 +0000 (04:32 +0000)
Add to mutex objects the ID of the thread that holds the lock.  This
will make future debugging much easier.

src/WINNT/client_osi/osibasel.c
src/WINNT/client_osi/osibasel.h

index 4b4dadd..eca25bf 100644 (file)
@@ -192,6 +192,7 @@ void lock_ObtainMutex(struct osi_mutex *lockp)
                /* if we're here, all clear to set the lock */
                lockp->flags |= OSI_LOCKFLAG_EXCL;
        }
+        lockp->tid = thrd_Current();
        LeaveCriticalSection(csp);
 }
 
@@ -212,6 +213,7 @@ void lock_ReleaseMutex(struct osi_mutex *lockp)
        osi_assertx(lockp->flags & OSI_LOCKFLAG_EXCL, "mutex not held");
        
        lockp->flags &= ~OSI_LOCKFLAG_EXCL;
+        lockp->tid = 0;
        if (!osi_TEmpty(&lockp->d.turn)) {
                osi_TSignalForMLs(&lockp->d.turn, 0, csp);
        }
@@ -411,6 +413,7 @@ void lock_InitializeMutex(osi_mutex_t *mp, char *namep)
         */
        mp->type = 0;
        mp->flags = 0;
+        mp->tid = 0;
        mp->atomicIndex = osi_MUTEXHASH(mp);
         osi_TInit(&mp->d.turn);
        return;
index fc80df4..7467f06 100644 (file)
@@ -31,6 +31,7 @@ typedef struct osi_mutex {
        char type;                      /* for all types; type 0 uses atomic count */
        char flags;                     /* flags for base type */
        unsigned short atomicIndex;     /* index of lock for low-level sync */
+        thread_t tid;                  /* tid of thread that owns the lock */
        unsigned short waiters;         /* waiters */
         unsigned short pad;
        union {