]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-windows-dbg-refcount-20061016
authorJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 17 Oct 2006 01:32:57 +0000 (01:32 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 17 Oct 2006 01:32:57 +0000 (01:32 +0000)
more code to assist in debugging scache refcount leaks

(cherry picked from commit 740013fcbf2273287414dd399b3020ed09cf07ba)

src/WINNT/afsd/cm_scache.c
src/WINNT/afsd/cm_scache.h
src/WINNT/afsd/cm_vnodeops.c
src/WINNT/afsd/cm_vnodeops.h

index 9eb6f1986fcb3533d757b0260fdd1ec7331a86de..6f96d59ce100ed4ba30d31ca4702aea78670efec 100644 (file)
@@ -534,8 +534,13 @@ cm_scache_t *cm_FindSCache(cm_fid_t *fidp)
     return NULL;
 }
 
+#ifdef DEBUG_REFCOUNT
+long cm_GetSCacheDbg(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
+                  cm_req_t *reqp, char * file, long line)
+#else
 long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
                   cm_req_t *reqp)
+#endif
 {
     long hash;
     cm_scache_t *scp;
@@ -563,6 +568,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
     lock_ObtainWrite(&cm_scacheLock);
     for (scp=cm_data.hashTablep[hash]; scp; scp=scp->nextp) {
         if (cm_FidCmp(fidp, &scp->fid) == 0) {
+#ifdef DEBUG_REFCOUNT
+           afsi_log("%s:%d cm_GetSCache (1) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+           osi_Log1(afsd_logp,"cm_GetSCache (1) outScpp 0x%p", scp);
+#endif
             cm_HoldSCacheNoLock(scp);
             *outScpp = scp;
             cm_AdjustLRU(scp);
@@ -658,6 +667,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
 #endif
        *outScpp = scp;
         lock_ReleaseWrite(&cm_scacheLock);
+#ifdef DEBUG_REFCOUNT
+       afsi_log("%s:%d cm_GetSCache (2) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+       osi_Log1(afsd_logp,"cm_GetSCache (2) outScpp 0x%p", scp);
+#endif
         return 0;
     }
     // end of yj code
@@ -681,6 +694,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
      */
     for (scp=cm_data.hashTablep[hash]; scp; scp=scp->nextp) {
         if (cm_FidCmp(fidp, &scp->fid) == 0) {
+#ifdef DEBUG_REFCOUNT
+           afsi_log("%s:%d cm_GetSCache (3) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+           osi_Log1(afsd_logp,"cm_GetSCache (3) outScpp 0x%p", scp);
+#endif
             cm_HoldSCacheNoLock(scp);
             osi_assert(scp->volp == volp);
             cm_AdjustLRU(scp);
@@ -749,6 +766,10 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
         
     /* now we have a held scache entry; just return it */
     *outScpp = scp;
+#ifdef DEBUG_REFCOUNT
+    afsi_log("%s:%d cm_GetSCache (4) outScpp 0x%p ref %d", file, line, scp, scp->refCount);
+    osi_Log1(afsd_logp,"cm_GetSCache (4) outScpp 0x%p", scp);
+#endif
     return 0;
 }
 
index 1da9633bc416aee9d9111d09d55167c801100479..c66de1518d5acd71664765f8a4746e4b052cebba 100644 (file)
@@ -308,10 +308,15 @@ typedef struct cm_scache {
 
 extern void cm_InitSCache(int, long);
 
+#ifdef DEBUG_REFCOUNT
+extern long cm_GetSCacheDbg(cm_fid_t *, cm_scache_t **, struct cm_user *,
+       struct cm_req *, char *, long);
+
+#define cm_GetSCache(a,b,c,d)  cm_GetSCacheDbg(a,b,c,d,__FILE__,__LINE__)
+#else
 extern long cm_GetSCache(cm_fid_t *, cm_scache_t **, struct cm_user *,
        struct cm_req *);
-
-extern void cm_PutSCache(cm_scache_t *);
+#endif
 
 extern cm_scache_t *cm_GetNewSCache(void);
 
index 4172cb38644e0c4a8b2cbcdbce968785e9eded9a..ea3ab5c0fc9a3b5c1295c52861e22bef635f3df3 100644 (file)
@@ -1258,14 +1258,24 @@ int cm_ExpandSysName(char *inp, char *outp, long outSize, unsigned int index)
     return 1;
 }   
 
+#ifdef DEBUG_REFCOUNT
+long cm_LookupDbg(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
+               cm_req_t *reqp, cm_scache_t **outpScpp, char * file, long line)
+#else
 long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
                cm_req_t *reqp, cm_scache_t **outpScpp)
+#endif
 {
     long code;
     char tname[256];
     int sysNameIndex = 0;
     cm_scache_t *scp = NULL;
 
+#ifdef DEBUG_REFCOUNT
+    afsi_log("%s:%d cm_Lookup dscp 0x%p ref %d", file, line, dscp, dscp->refCount, file, line);
+    osi_Log2(afsd_logp, "cm_Lookup dscp 0x%p ref %d", dscp, dscp->refCount);
+#endif
+
     if ( stricmp(namep,SMB_IOCTL_FILENAME_NOSLASH) == 0 ) {
         if (flags & CM_FLAG_CHECKPATH)
             return CM_ERROR_NOSUCHPATH;
@@ -1277,6 +1287,11 @@ long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
         code = cm_ExpandSysName(namep, tname, sizeof(tname), sysNameIndex);
         if (code > 0) {
             code = cm_LookupInternal(dscp, tname, flags, userp, reqp, &scp);
+#ifdef DEBUG_REFCOUNT
+           afsi_log("%s:%d cm_LookupInternal (1) code 0x%x dscp 0x%p ref %d scp 0x%p ref %d", file, line, code, dscp, dscp->refCount, scp, scp ? scp->refCount : 0);
+           osi_Log3(afsd_logp, "cm_LookupInternal (1) code 0x%x dscp 0x%p scp 0x%p", code, dscp, scp);
+#endif
+
             if (code == 0) {
                 *outpScpp = scp;
                 return 0;
@@ -1286,7 +1301,13 @@ long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
                 scp = NULL;
             }
         } else {
-            return cm_LookupInternal(dscp, namep, flags, userp, reqp, outpScpp);
+            code = cm_LookupInternal(dscp, namep, flags, userp, reqp, &scp);
+#ifdef DEBUG_REFCOUNT
+           afsi_log("%s:%d cm_LookupInternal (2) code 0x%x dscp 0x%p ref %d scp 0x%p ref %d", file, line, code, dscp, dscp->refCount, scp, scp ? scp->refCount : 0);
+           osi_Log3(afsd_logp, "cm_LookupInternal (2) code 0x%x dscp 0x%p scp 0x%p", code, dscp, scp);
+#endif
+           *outpScpp = scp;
+           return code;
         }
     }
 
@@ -1517,9 +1538,14 @@ long cm_AssembleLink(cm_scache_t *linkScp, char *pathSuffixp,
     lock_ReleaseMutex(&linkScp->mx);
     return code;
 }
-
+#ifdef DEBUG_REFCOUNT
+long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
+               cm_user_t *userp, char *tidPathp, cm_req_t *reqp, cm_scache_t **outScpp, 
+              char * file, long line)
+#else
 long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
                cm_user_t *userp, char *tidPathp, cm_req_t *reqp, cm_scache_t **outScpp)
+#endif
 {
     long code;
     char *tp;                  /* ptr moving through input buffer */
@@ -1540,8 +1566,12 @@ long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
     int extraFlag;             /* avoid chasing mt pts for dir cmd */
     int phase = 1;             /* 1 = tidPathp, 2 = pathp */
 
+#ifdef DEBUG_REFCOUNT
+    afsi_log("%s:%d cm_NameI rootscp 0x%p ref %d", file, line, rootSCachep, rootSCachep->refCount);
     osi_Log4(afsd_logp,"cm_NameI rootscp 0x%p path %s tidpath %s flags 0x%x",
-             rootSCachep, pathp, tidPathp, flags);
+             rootSCachep, pathp ? pathp : "<NULL>", tidPathp ? tidPathp : "<NULL>", 
+             flags);
+#endif
 
     tp = tidPathp;
     if (tp == NULL) {
@@ -1750,6 +1780,10 @@ long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
         *outScpp = tscp;
     else if (tscp)
         cm_ReleaseSCache(tscp);
+
+#ifdef DEBUG_REFCOUNT
+    afsi_log("%s:%d cm_NameI code 0x%x outScpp 0x%p ref %d", file, line, code, *outScpp, (*outScpp)->refCount);
+#endif
     osi_Log2(afsd_logp,"cm_NameI code 0x%x outScpp 0x%p", code, *outScpp);
     return code;
 }
index ababc1b4c8620bb92f636376d9845b6eb28c7a4b..6b7d63bd448a98a21f0a009ffc40e76dc54ef9fb 100644 (file)
@@ -65,12 +65,23 @@ extern void cm_Gen8Dot3Name(struct cm_dirEntry *dep, char *shortName,
 extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
        cm_req_t *reqp);
 
+#ifdef DEBUG_REFCOUNT
+extern long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
+       cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
+       cm_scache_t **outScpp, char *, long);
+
+extern long cm_LookupDbg(cm_scache_t *dscp, char *namep, long flags,
+       cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp, char *, long);
+
+#define cm_Lookup(a,b,c,d,e,f)  cm_LookupDbg(a,b,c,d,e,f,__FILE__,__LINE__)
+#define cm_NameI(a,b,c,d,e,f,g) cm_NameIDbg(a,b,c,d,e,f,g,__FILE__,__LINE__)
+#else
 extern long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
        cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
        cm_scache_t **outScpp);
-
 extern long cm_Lookup(cm_scache_t *dscp, char *namep, long flags,
        cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
+#endif
 
 extern long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags,
                               cm_user_t *userp, cm_req_t *reqp,