# HG changeset patch # User td122701 # Date 1172707417 28800 # Node ID caeeab9fbf5a1fa32e88a010b6021a9eabae21c1 # Parent b35ac6f887e34fbdd32272f9e610e3f28ecedaa8 6521864 Niagara-2 page retirement leaks memory diff -r b35ac6f887e3 -r caeeab9fbf5a usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_dimm.c --- a/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_dimm.c Wed Feb 28 12:37:39 2007 -0800 +++ b/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_dimm.c Wed Feb 28 16:03:37 2007 -0800 @@ -81,8 +81,12 @@ uint_t cert) { #ifdef sun4v - nvlist_t *flt = fmd_nvl_create_fault(hdl, fltnm, cert, - dimm->dimm_asru_nvl, cmd_mem2hc(hdl, dimm->dimm_asru_nvl), NULL); + nvlist_t *flt, *nvlfru; + nvlfru = cmd_mem2hc(hdl, dimm->dimm_asru_nvl); + flt = fmd_nvl_create_fault(hdl, fltnm, cert, + dimm->dimm_asru_nvl, nvlfru, NULL); + if (nvlfru != NULL) + nvlist_free(nvlfru); return (cmd_fault_add_location(hdl, flt, dimm->dimm_unum)); #else return (fmd_nvl_create_fault(hdl, fltnm, cert, dimm->dimm_asru_nvl, diff -r b35ac6f887e3 -r caeeab9fbf5a usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_pageerr.c --- a/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_pageerr.c Wed Feb 28 12:37:39 2007 -0800 +++ b/usr/src/cmd/fm/modules/sun4/cpumem-diagnosis/cmd_pageerr.c Wed Feb 28 16:03:37 2007 -0800 @@ -48,7 +48,7 @@ { cmd_page_t *page = cmd_page_lookup(afar); const char *uuid; - nvlist_t *flt; + nvlist_t *flt, *nvlfru; if (page == NULL) page = cmd_page_create(hdl, modasru, afar); @@ -66,9 +66,12 @@ CMD_PTR_PAGE_CASE, &uuid); #ifdef sun4v + nvlfru = cmd_mem2hc(hdl, modfru); flt = fmd_nvl_create_fault(hdl, "fault.memory.page", 100, - page->page_asru_nvl, cmd_mem2hc(hdl, modfru), NULL); + page->page_asru_nvl, nvlfru, NULL); flt = cmd_fault_add_location(hdl, flt, cmd_fmri_get_unum(modfru)); + if (nvlfru != NULL) + nvlist_free(nvlfru); #else /* sun4v */ flt = fmd_nvl_create_fault(hdl, "fault.memory.page", 100, page->page_asru_nvl, modfru, NULL); diff -r b35ac6f887e3 -r caeeab9fbf5a usr/src/cmd/fm/modules/sun4v/cpumem-diagnosis/cmd_memerr_arch.c --- a/usr/src/cmd/fm/modules/sun4v/cpumem-diagnosis/cmd_memerr_arch.c Wed Feb 28 12:37:39 2007 -0800 +++ b/usr/src/cmd/fm/modules/sun4v/cpumem-diagnosis/cmd_memerr_arch.c Wed Feb 28 16:03:37 2007 -0800 @@ -474,7 +474,7 @@ if (breakup_components(nac_name, "/", hc_list) < 0) { fmd_hdl_error(hdl, "cannot allocate components for hc-list\n"); - for (i = 0; i < n; n++) { + for (i = 0; i < n; i++) { if (hc_list[i] != NULL) nvlist_free(hc_list[i]); } @@ -489,18 +489,20 @@ (nvlist_add_string(fp, FM_FMRI_HC_ROOT, "/") != 0) || (nvlist_add_uint32(fp, FM_FMRI_HC_LIST_SZ, n) != 0) || (nvlist_add_nvlist_array(fp, FM_FMRI_HC_LIST, hc_list, n) != 0)) { - for (i = 0; i < n; n++) { - nvlist_free(hc_list[i]); + for (i = 0; i < n; i++) { + if (hc_list[i] != NULL) + nvlist_free(hc_list[i]); } fmd_hdl_free(hdl, hc_list, sizeof (nvlist_t *)*n); fmd_hdl_free(hdl, nac_name, strlen(unum)+1); nvlist_free(fp); return (NULL); } - /* - * if the nvlist_add_nvlist_array succeeds, then it frees - * the hc_list[i]'s. - */ + + for (i = 0; i < n; i++) { + if (hc_list[i] != NULL) + nvlist_free(hc_list[i]); + } fmd_hdl_free(hdl, hc_list, sizeof (nvlist_t *)*n); fmd_hdl_free(hdl, nac_name, strlen(unum)+1); if (nvlist_lookup_string_array(mem_fmri, FM_FMRI_HC_SERIAL_ID,