Print this page
patch tsoome-feedback
6659 nvlist_free(NULL) is a no-op


 995                                 ret = topo_mod_seterrno(mp,
 996                                     ETOPO_PRSR_REGMETH);
 997                                 goto pmr_done;
 998                         }
 999                 }
1000                 if (is_nonvolatile) {
1001                         if (topo_prop_setnonvolatile(tn, meth.pg_name,
1002                             meth.prop_name, &err) != 0) {
1003                                 ret = topo_mod_seterrno(mp,
1004                                     ETOPO_PRSR_REGMETH);
1005                                 goto pmr_done;
1006                         }
1007                 }
1008         }
1009 
1010 pmr_done:
1011         if (meth_name)
1012                 xmlFree(meth_name);
1013         if (prop_name)
1014                 xmlFree(prop_name);
1015         if (arg_nvl)
1016                 nvlist_free(arg_nvl);
1017         return (ret);
1018 }
1019 
1020 
1021 static int
1022 pgroup_record(topo_mod_t *mp, xmlNodePtr pxn, tnode_t *tn, const char *rname,
1023     tf_pad_t *rpad, int pi, const char *ppgrp_name)
1024 {
1025         topo_stability_t nmstab, dstab;
1026         uint64_t ver;
1027         xmlNodePtr cn;
1028         xmlChar *name;
1029         nvlist_t **apl = NULL;
1030         nvlist_t *pgnvl = NULL;
1031         int pcnt = 0;
1032         int ai = 0;
1033         int e;
1034 
1035         topo_dprintf(mp->tm_hdl, TOPO_DBG_XML, "pgroup_record\n");


1085                 }
1086         for (cn = pxn->xmlChildrenNode; cn != NULL; cn = cn->next) {
1087                 if (xmlStrcmp(cn->name, (xmlChar *)Propval) == 0) {
1088                         if (ai < pcnt) {
1089                                 if ((apl[ai] = pval_record(mp, cn)) == NULL)
1090                                         break;
1091                         }
1092                         ai++;
1093                 } else if (xmlStrcmp(cn->name, (xmlChar *)Prop_meth) == 0) {
1094                         if (pmeth_record(mp, (const char *)name, cn, tn, rname,
1095                             ppgrp_name) < 0)
1096                                 break;
1097                 }
1098         }
1099         xmlFree(name);
1100         if (pcnt > 0) {
1101                 e |= (ai != pcnt);
1102                 e |= nvlist_add_nvlist_array(pgnvl, INV_PGRP_ALLPROPS, apl,
1103                     pcnt);
1104                 for (ai = 0; ai < pcnt; ai++)
1105                         if (apl[ai] != NULL)
1106                                 nvlist_free(apl[ai]);
1107                 topo_mod_free(mp, apl, pcnt * sizeof (nvlist_t *));
1108                 if (e != 0) {
1109                         nvlist_free(pgnvl);
1110                         return (-1);
1111                 }
1112         }
1113         rpad->tpad_pgs[pi] = pgnvl;
1114         return (0);
1115 }
1116 
1117 static int
1118 pgroups_record(topo_mod_t *mp, xmlNodePtr pxn, tnode_t *tn, const char *rname,
1119     tf_pad_t *rpad, const char *ppgrp)
1120 {
1121         xmlNodePtr cn;
1122         int pi = 0;
1123 
1124         topo_dprintf(mp->tm_hdl, TOPO_DBG_XML, "pgroups_record: pxn->name=%s\n",
1125             pxn->name);




 995                                 ret = topo_mod_seterrno(mp,
 996                                     ETOPO_PRSR_REGMETH);
 997                                 goto pmr_done;
 998                         }
 999                 }
1000                 if (is_nonvolatile) {
1001                         if (topo_prop_setnonvolatile(tn, meth.pg_name,
1002                             meth.prop_name, &err) != 0) {
1003                                 ret = topo_mod_seterrno(mp,
1004                                     ETOPO_PRSR_REGMETH);
1005                                 goto pmr_done;
1006                         }
1007                 }
1008         }
1009 
1010 pmr_done:
1011         if (meth_name)
1012                 xmlFree(meth_name);
1013         if (prop_name)
1014                 xmlFree(prop_name);

1015         nvlist_free(arg_nvl);
1016         return (ret);
1017 }
1018 
1019 
1020 static int
1021 pgroup_record(topo_mod_t *mp, xmlNodePtr pxn, tnode_t *tn, const char *rname,
1022     tf_pad_t *rpad, int pi, const char *ppgrp_name)
1023 {
1024         topo_stability_t nmstab, dstab;
1025         uint64_t ver;
1026         xmlNodePtr cn;
1027         xmlChar *name;
1028         nvlist_t **apl = NULL;
1029         nvlist_t *pgnvl = NULL;
1030         int pcnt = 0;
1031         int ai = 0;
1032         int e;
1033 
1034         topo_dprintf(mp->tm_hdl, TOPO_DBG_XML, "pgroup_record\n");


1084                 }
1085         for (cn = pxn->xmlChildrenNode; cn != NULL; cn = cn->next) {
1086                 if (xmlStrcmp(cn->name, (xmlChar *)Propval) == 0) {
1087                         if (ai < pcnt) {
1088                                 if ((apl[ai] = pval_record(mp, cn)) == NULL)
1089                                         break;
1090                         }
1091                         ai++;
1092                 } else if (xmlStrcmp(cn->name, (xmlChar *)Prop_meth) == 0) {
1093                         if (pmeth_record(mp, (const char *)name, cn, tn, rname,
1094                             ppgrp_name) < 0)
1095                                 break;
1096                 }
1097         }
1098         xmlFree(name);
1099         if (pcnt > 0) {
1100                 e |= (ai != pcnt);
1101                 e |= nvlist_add_nvlist_array(pgnvl, INV_PGRP_ALLPROPS, apl,
1102                     pcnt);
1103                 for (ai = 0; ai < pcnt; ai++)

1104                         nvlist_free(apl[ai]);
1105                 topo_mod_free(mp, apl, pcnt * sizeof (nvlist_t *));
1106                 if (e != 0) {
1107                         nvlist_free(pgnvl);
1108                         return (-1);
1109                 }
1110         }
1111         rpad->tpad_pgs[pi] = pgnvl;
1112         return (0);
1113 }
1114 
1115 static int
1116 pgroups_record(topo_mod_t *mp, xmlNodePtr pxn, tnode_t *tn, const char *rname,
1117     tf_pad_t *rpad, const char *ppgrp)
1118 {
1119         xmlNodePtr cn;
1120         int pi = 0;
1121 
1122         topo_dprintf(mp->tm_hdl, TOPO_DBG_XML, "pgroups_record: pxn->name=%s\n",
1123             pxn->name);