Print this page
dss_paths[] entries need cleanup too
@@ -813,12 +813,12 @@
sip->dss_npaths = dss_npaths;
sip->dss_paths = kmem_alloc(dss_npaths *
sizeof (rfs4_dss_path_t *), KM_SLEEP);
for (i = 0; i < dss_npaths; i++) {
- /* CSTYLED */
- sip->dss_paths[i] = rfs4_dss_newpath(nsrv4, sip, dss_paths[i], i);
+ sip->dss_paths[i] =
+ rfs4_dss_newpath(nsrv4, sip, dss_paths[i], i);
}
mutex_enter(&nsrv4->servinst_lock);
if (nsrv4->nfs4_cur_servinst != NULL) {
/* add to linked list */
@@ -852,13 +852,29 @@
for (sip = current; sip != NULL; sip = prev) {
prev = sip->prev;
rw_destroy(&sip->rwlock);
if (sip->oldstate)
kmem_free(sip->oldstate, sizeof (rfs4_oldstate_t));
- if (sip->dss_paths)
+ if (sip->dss_paths) {
+ int i = sip->dss_npaths;
+
+ while (i > 0) {
+ i--;
+ if (sip->dss_paths[i] != NULL) {
+ char *path = sip->dss_paths[i]->path;
+
+ if (path != NULL) {
+ kmem_free(path,
+ strlen(path) + 1);
+ }
+ kmem_free(sip->dss_paths[i],
+ sizeof (rfs4_dss_path_t));
+ }
+ }
kmem_free(sip->dss_paths,
sip->dss_npaths * sizeof (rfs4_dss_path_t *));
+ }
kmem_free(sip, sizeof (rfs4_servinst_t));
#ifdef DEBUG
n++;
#endif
}