]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-windows-scache-ref-leak-20061008
authorJeffrey Altman <jaltman@secure-endpoints.com>
Sun, 8 Oct 2006 21:35:53 +0000 (21:35 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Sun, 8 Oct 2006 21:35:53 +0000 (21:35 +0000)
plug two more scache refcount leaks

(cherry picked from commit 7231e2efe650b004168d443a290c4fed8b2db0a5)

src/WINNT/afsd/afsd_init.c
src/WINNT/afsd/afsd_init.h
src/WINNT/afsd/afsd_service.c
src/WINNT/afsd/cm_ioctl.c

index fbb012d477895b53e1c09063e597ebf5f67ac748..c5a3471ef995d320856178caafd133f201d6d72d 100644 (file)
@@ -1187,6 +1187,13 @@ int afsd_InitCM(char **reasonP)
     return 0;
 }
 
+int afsd_ShutdownCM(void)
+{
+    cm_ReleaseSCache(&cm_data.rootSCachep);
+
+    return 0;
+}
+
 int afsd_InitDaemons(char **reasonP)
 {
     long code;
index 6465341a51708925664a6767757253b5d01bf28d..67c5646f60948ff9db06c45a7f1a237a8c5762b4 100644 (file)
@@ -19,6 +19,7 @@ int afsd_InitCM(char **reasonP, struct cmd_syndesc *as, char *arock);
 int afsd_InitSMB(char **reasonP);
 #endif /* !DJGPP */
 int afsd_InitDaemons(char **reasonP);
+int afsd_ShutdownCM(void);
 void afsd_ForceTrace(BOOL flush);
 void afsd_SetUnhandledExceptionFilter();
 
index d3abc009a97442526c275a89bef22f84322d6cbe..1e38d4feca7c66be7cc22d2b6b9f9f91d37d13cf 100644 (file)
@@ -1345,7 +1345,9 @@ afsd_Main(DWORD argc, LPTSTR *argv)
                                          
     cm_DaemonShutdown();                 
     afsi_log("Daemon shutdown complete");
-                                         
+    
+    afsd_ShutdownCM();
+
     buf_Shutdown();                      
     afsi_log("Buffer shutdown complete");
                                          
index 06d0412d1b2ac7738a7c97b25eb2f750b257d003..d03d68f1186b1c7552efff1d74694534a2f4b26b 100644 (file)
@@ -256,13 +256,17 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
                              CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                              userp, sharePath, reqp, &substRootp);
             free(sharePath);
-            if (code) 
+            if (code) {
+               osi_Log1(afsd_logp,"cm_ParseIoctlPath [1] code 0x%x", code);
                 return code;
+           }
 
             code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                              userp, NULL, reqp, scpp);
-            if (code) 
+            if (code) {
+               osi_Log1(afsd_logp,"cm_ParseIoctlPath [2] code 0x%x", code);
                 return code;
+           }
         } else {
             /* otherwise, treat the name as a cellname mounted off the afs root.
              * This requires that we reconstruct the shareName string with 
@@ -284,25 +288,35 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data,
                              CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                              userp, shareName, reqp, &substRootp);
-            if (code) 
+            if (code) {
+               osi_Log1(afsd_logp,"cm_ParseIoctlPath [3] code 0x%x", code);
                 return code;
+           }
 
             code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                             userp, NULL, reqp, scpp);
-            if (code) 
+            if (code) {
+               cm_ReleaseSCache(substRootp);
+               osi_Log1(afsd_logp,"cm_ParseIoctlPath code [4] 0x%x", code);
                 return code;
+           }
         }
     } else {
         code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data,
                          CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                          userp, ioctlp->tidPathp, reqp, &substRootp);
-        if (code) 
+        if (code) {
+           osi_Log1(afsd_logp,"cm_ParseIoctlPath [6] code 0x%x", code);
             return code;
+       }
         
         code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                          userp, NULL, reqp, scpp);
-        if (code) 
+        if (code) {
+           cm_ReleaseSCache(substRootp);
+           osi_Log1(afsd_logp,"cm_ParseIoctlPath [7] code 0x%x", code);
             return code;
+       }
     }
 
     /* # of bytes of path */
@@ -312,7 +326,11 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
     /* This is usually nothing, but for StatMountPoint it is the file name. */
     TranslateExtendedChars(ioctlp->inDatap);
 
+    if (substRootp)
+       cm_ReleaseSCache(substRootp);
+
     /* and return success */
+    osi_Log1(afsd_logp,"cm_ParseIoctlPath [8] code 0x%x", code);
     return 0;
 }