]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-locker-thread-tracking-20070111
authorDerrick Brashear <shadow@dementia.org>
Fri, 12 Jan 2007 16:29:03 +0000 (16:29 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 12 Jan 2007 16:29:03 +0000 (16:29 +0000)
track thread ids so we can properly not deadlock

(cherry picked from commit 2b7f13c2276613e120cef159f44c912e866412f5)

src/afs/afs_callback.c
src/afs/lock.h

index 1672c9149578199d953f5260d17bea904c1b05a8..3b2c9cf361d3dd8ca14fe0c0a74d6ce1a2b9c70a 100644 (file)
@@ -328,9 +328,9 @@ SRXAFSCB_GetLock(struct rx_call *a_call, afs_int32 a_index,
            ((struct afs_lock *)(tl->addr))->num_waiting;
 #ifdef INSTRUMENT_LOCKS
        a_result->lock.pid_last_reader =
-           ((struct afs_lock *)(tl->addr))->pid_last_reader;
+           MyPidxx2Pid(((struct afs_lock *)(tl->addr))->pid_last_reader);
        a_result->lock.pid_writer =
-           ((struct afs_lock *)(tl->addr))->pid_writer;
+           MyPidxx2Pid(((struct afs_lock *)(tl->addr))->pid_writer);
        a_result->lock.src_indicator =
            ((struct afs_lock *)(tl->addr))->src_indicator;
 #else
index db6194ec45d1b3618d11248137e65bbae55a19b0..27e4f2a1d9815914383e863bde73165a9ab5f2bc 100644 (file)
@@ -86,40 +86,61 @@ typedef struct afs_bozoLock afs_bozoLock_t;
 #define BEGINMAC do {
 #define ENDMAC   } while (0)
 
-#if defined(AFS_SUN57_ENV) 
-#define MyPidxx (curthread->t_did)
-#else
-#if defined(AFS_OBSD_ENV) || defined(AFS_SUN5_ENV)
+#if defined(AFS_SUN57_ENV)
+typedef kthread_t * afs_lock_tracker_t;
+#define MyPidxx (curthread)
+#define MyPidxx2Pid(x) (ttoproc(x)->p_pid)
+#elif defined(AFS_SUN5_ENV) || defined(AFS_OBSD_ENV)
+typedef unsigned int afs_lock_tracker_t;
 #define MyPidxx (curproc->p_pid)
+#define MyPidxx2Pid(x) (x)
 #else
 #if defined(AFS_AIX41_ENV)
+typedef tid_t afs_lock_tracker_t;
 extern tid_t thread_self();
-#define MyPidxx thread_self()
+#define MyPidxx (thread_self())
+#define MyPidxx2Pid(x) ((afs_int32)(x))
 #else /* AFS_AIX41_ENV */
 #if defined(AFS_HPUX101_ENV)
-#define MyPidxx ((int)p_pid(u.u_procp))
+typedef struct proc * afs_lock_tracker_t;
+#define MyPidxx (u.u_procp)
+#define MyPidxx2Pid(x) ((afs_int32)p_pid(x))
 #else
 #if defined(AFS_SGI64_ENV)
 #if defined(AFS_SGI65_ENV)
+typedef unsigned int afs_lock_tracker_t;
 #define MyPidxx proc_pid(curproc())
+#define MyPidxx2Pid(x) (x)
 #else
+typedef unsigned int afs_lock_tracker_t;
 #define MyPidxx current_pid()
+#define MyPidxx2Pid(x) (x)
 #endif
 #else /* AFS_SGI64_ENV */
 #ifdef AFS_LINUX20_ENV
-#define MyPidxx current->pid
+typedef struct task_struct * afs_lock_tracker_t;
+#define MyPidxx (current)
+#define MyPidxx2Pid(x) ((x)->pid)
 #else
 #if defined(AFS_DARWIN_ENV)
 #if defined(AFS_DARWIN80_ENV)
+typedef unsigned int afs_lock_tracker_t;
 #define MyPidxx (proc_selfpid())
+#define MyPidxx2Pid(x) (x)
 #else
+typedef unsigned int afs_lock_tracker_t;
 #define MyPidxx (current_proc()->p_pid )
+#define MyPidxx2Pid(x) (x)
 #endif
 #else
 #if defined(AFS_FBSD_ENV)
+typedef unsigned int afs_lock_tracker_t;
 #define MyPidxx (curproc->p_pid )
+#define MyPidxx2Pid(x) (x)
 #else
+typedef unsigned int afs_lock_tracker_t;
 #define MyPidxx (u.u_procp->p_pid )
+#define MyPidxx2Pid(x) (x)
 #endif /* AFS_FBSD_ENV */
 #endif /* AFS_DARWIN_ENV */
 #endif /* AFS_LINUX20_ENV */
@@ -127,7 +148,6 @@ extern tid_t thread_self();
 #endif /* AFS_HPUX101_ENV */
 #endif /* AFS_AIX41_ENV */
 #endif
-#endif
 
 /* all locks wait on excl_locked except for READ_LOCK, which waits on readers_reading */
 struct afs_lock {
@@ -143,8 +163,8 @@ struct afs_lock {
      ** only for writes/shared  locks. Hence, it indictes where in the
      ** source code the shared/write lock was set.
      */
-    unsigned int pid_last_reader;      /* proceess id of last reader */
-    unsigned int pid_writer;   /* process id of writer, else 0 */
+    afs_lock_tracker_t pid_last_reader;        /* proceess id of last reader */
+    afs_lock_tracker_t pid_writer;     /* process id of writer, else 0 */
     unsigned int src_indicator;        /* third param to ObtainLock() */
 #endif                         /* INSTRUMENT_LOCKS */
 };