Tcl Source Code

Artifact [fb663c71f4]
Login

Artifact fb663c71f45c7d676fd3113e761bf61d79ff2143:

Attachment "2979572.patch" to ticket [2979572fff] added by dgp 2010-03-31 05:35:00.
Index: generic/threadSpCmd.c
===================================================================
RCS file: /cvsroot/tcl/thread/generic/threadSpCmd.c,v
retrieving revision 1.31
diff -u -r1.31 threadSpCmd.c
--- generic/threadSpCmd.c	18 Mar 2010 23:15:44 -0000	1.31
+++ generic/threadSpCmd.c	30 Mar 2010 22:34:23 -0000
@@ -369,6 +369,7 @@
     const char *mutexName;
     SpMutex *mutexPtr;
     Sp_ReadWriteMutex *rwPtr;
+    Sp_AnyMutex **lockPtr;
 
     static const char *cmdOpts[] = {
         "create", "destroy", "rlock", "wlock", "unlock", NULL
@@ -465,7 +466,8 @@
         return TCL_ERROR;
     }
 
-    rwPtr = (Sp_ReadWriteMutex*)&mutexPtr->lock;
+    lockPtr = &mutexPtr->lock;
+    rwPtr = (Sp_ReadWriteMutex*) lockPtr;
     
     switch ((enum options)opt) {
     case w_RLOCK:
@@ -1124,12 +1126,14 @@
 static int 
 SpMutexLock(SpMutex *mutexPtr)
 {
+    Sp_AnyMutex **lockPtr = &mutexPtr->lock;
+
     switch (mutexPtr->type) {
     case EMUTEXID:
-        return Sp_ExclusiveMutexLock((Sp_ExclusiveMutex*)&mutexPtr->lock);
+        return Sp_ExclusiveMutexLock((Sp_ExclusiveMutex*)lockPtr);
         break;
     case RMUTEXID: 
-        return Sp_RecursiveMutexLock((Sp_RecursiveMutex*)&mutexPtr->lock);
+        return Sp_RecursiveMutexLock((Sp_RecursiveMutex*)lockPtr);
         break;
     }
 
@@ -1156,12 +1160,14 @@
 static int
 SpMutexUnlock(SpMutex *mutexPtr)
 {
+    Sp_AnyMutex **lockPtr = &mutexPtr->lock;
+
     switch (mutexPtr->type) {
     case EMUTEXID:
-        return Sp_ExclusiveMutexUnlock((Sp_ExclusiveMutex*)&mutexPtr->lock);
+        return Sp_ExclusiveMutexUnlock((Sp_ExclusiveMutex*)lockPtr);
         break;
     case RMUTEXID:
-        return Sp_RecursiveMutexUnlock((Sp_RecursiveMutex*)&mutexPtr->lock);
+        return Sp_RecursiveMutexUnlock((Sp_RecursiveMutex*)lockPtr);
         break;
     }
 
@@ -1189,6 +1195,8 @@
 static int
 SpMutexFinalize(SpMutex *mutexPtr)
 {
+    Sp_AnyMutex **lockPtr = &mutexPtr->lock;
+
     if (AnyMutexIsLocked((Sp_AnyMutex*)mutexPtr->lock, (Tcl_ThreadId)0)) {
         return 0;
     }
@@ -1200,13 +1208,13 @@
 
     switch (mutexPtr->type) {
     case EMUTEXID:
-        Sp_ExclusiveMutexFinalize((Sp_ExclusiveMutex*)&mutexPtr->lock);
+        Sp_ExclusiveMutexFinalize((Sp_ExclusiveMutex*)lockPtr);
         break;
     case RMUTEXID:
-        Sp_RecursiveMutexFinalize((Sp_RecursiveMutex*)&mutexPtr->lock);
+        Sp_RecursiveMutexFinalize((Sp_RecursiveMutex*)lockPtr);
         break;
     case WMUTEXID:
-        Sp_ReadWriteMutexFinalize((Sp_ReadWriteMutex*)&mutexPtr->lock);
+        Sp_ReadWriteMutexFinalize((Sp_ReadWriteMutex*)lockPtr);
         break;
     default:
         break;