]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: Fix usage of cm_FreeServerList
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 3 Jun 2010 15:54:04 +0000 (11:54 -0400)
committerJeffrey Altman <jaltman@openafs.org>
Thu, 3 Jun 2010 22:59:01 +0000 (15:59 -0700)
cm_FreeServerList will set the input variable to NULL if the
contents of the list could in fact be freed.  If they could not
be freed, the individual entries are marked for deletion and will
not be subsequently used.  Do not set the list variable to NULL
after calling cm_FreeServerList otherwise memory can be leaked.

LICENSE MIT

Change-Id: Ia3cacd760d7395a2dd6b063643a8aa86f9e468b9
Reviewed-on: http://gerrit.openafs.org/2078
Tested-by: Jeffrey Altman <jaltman@openafs.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
src/WINNT/afsd/cm_cell.c
src/WINNT/afsd/cm_conn.c
src/WINNT/afsd/cm_ioctl.c

index a54c0cbe48cc47ad58392de58a638cf93176326d..317cd73b486754c23267e634dc288c92ef7f7d9b 100644 (file)
@@ -94,15 +94,13 @@ cm_cell_t *cm_UpdateCell(cm_cell_t * cp, afs_uint32 flags)
          ((cp->flags & CM_CELLFLAG_VLSERVER_INVALID)))
             ) 
     {
-        /* must empty cp->vlServersp */
-        if (cp->vlServersp) {
-            cm_FreeServerList(&cp->vlServersp, CM_FREESERVERLIST_DELETE);
-            cp->vlServersp = NULL;
-        }
-
         lock_ReleaseMutex(&cp->mx);
         mxheld = 0;
 
+        /* must empty cp->vlServersp */
+        if (cp->vlServersp)
+            cm_FreeServerList(&cp->vlServersp, CM_FREESERVERLIST_DELETE);
+
         rock.cellp = cp;
         rock.flags = flags;
         code = cm_SearchCellRegistry(1, cp->name, NULL, cp->linkedName, cm_AddCellProc, &rock);
index 6534904d48e48385f4ff0e42f7a79fb6cac1db35..33ac4c8bf4544c3efad2ca4f47e110df72c94240 100644 (file)
@@ -406,7 +406,6 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp,
                         lock_ReleaseWrite(&cm_serverLock);
                         if (free_svr_list) {
                             cm_FreeServerList(serverspp, 0);
-                            serverspp = NULL;
                             serversp = NULL;
                             free_svr_list = 0;
                         }
@@ -508,7 +507,6 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp,
 
         if (free_svr_list) {
             cm_FreeServerList(serverspp, 0);
-            serverspp = NULL;
             serversp = NULL;
             free_svr_list = 0;
         }
@@ -608,7 +606,6 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp,
         /* Free the server list before cm_ForceUpdateVolume is called */
         if (free_svr_list) {
             cm_FreeServerList(serverspp, 0);
-            serverspp = NULL;
             serversp = NULL;
             free_svr_list = 0;
         }
index 2b3bde012596def99980be58edc3abca6513b428..f7ffda8ddc07503b46bd227a938a328dcd93ad7f 100644 (file)
@@ -1486,7 +1486,6 @@ cm_IoctlNewCell(struct cm_ioctl *ioctlp, struct cm_user *userp)
 
         /* delete all previous server lists - cm_FreeServerList will ask for write on cm_ServerLock*/
         cm_FreeServerList(&cp->vlServersp, CM_FREESERVERLIST_DELETE);
-        cp->vlServersp = NULL;
         lock_ReleaseWrite(&cm_cellLock);
 
         rock.cellp = cp;