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

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/fm/modules/common/eversholt/fme.c
          +++ new/usr/src/cmd/fm/modules/common/eversholt/fme.c
↓ open down ↓ 1693 lines elided ↑ open up ↑
1694 1694                  /* put verbose flag back */
1695 1695                  Verbose = prev_verbose;
1696 1696  
1697 1697                  if (state != FME_DISPROVED) {
1698 1698                          /* found an FME that explains the ereport */
1699 1699                          matched++;
1700 1700                          out(O_ALTFP|O_NONL, "[");
1701 1701                          ipath_print(O_ALTFP|O_NONL, eventstring, ipp);
1702 1702                          out(O_ALTFP, " explained by FME%d]", fmep->id);
1703 1703  
1704      -                        if (pre_peek_nvp)
1705      -                                nvlist_free(pre_peek_nvp);
     1704 +                        nvlist_free(pre_peek_nvp);
1706 1705  
1707 1706                          if (ep->count == 1)
1708 1707                                  serialize_observation(fmep, eventstring, ipp);
1709 1708  
1710 1709                          if (ffep) {
1711 1710                                  fmd_case_add_ereport(hdl, fmep->fmcase, ffep);
1712 1711                                  ep->ffep = ffep;
1713 1712                          }
1714 1713  
1715 1714                          stats_counter_bump(fmep->Rcount);
↓ open down ↓ 305 lines elided ↑ open up ↑
2021 2020                  if (err != 0) {
2022 2021                          failure = "construction of an hc-pair failed";
2023 2022                          goto boom;
2024 2023                  }
2025 2024                  pa[i++] = p;
2026 2025          }
2027 2026  
2028 2027          err = nvlist_add_nvlist_array(f, FM_FMRI_HC_LIST, pa, depth);
2029 2028          if (err == 0) {
2030 2029                  for (i = 0; i < depth; i++)
2031      -                        if (pa[i] != NULL)
2032      -                                nvlist_free(pa[i]);
     2030 +                        nvlist_free(pa[i]);
2033 2031                  return (f);
2034 2032          }
2035 2033          failure = "addition of hc-pair array to FMRI failed";
2036 2034  
2037 2035  boom:
2038 2036          for (i = 0; i < depth; i++)
2039      -                if (pa[i] != NULL)
2040      -                        nvlist_free(pa[i]);
     2037 +                nvlist_free(pa[i]);
2041 2038          nvlist_free(f);
2042 2039          out(O_DIE, "%s", failure);
2043 2040          /*NOTREACHED*/
2044 2041          return (NULL);
2045 2042  }
2046 2043  
2047 2044  /* an ipath cache entry is an array of these, with s==NULL at the end */
2048 2045  struct ipath {
2049 2046          const char *s;  /* component name (in stable) */
2050 2047          int i;          /* instance number */
↓ open down ↓ 43 lines elided ↑ open up ↑
2094 2091                  if (err != 0) {
2095 2092                          failure = "construction of an hc-pair failed";
2096 2093                          goto boom;
2097 2094                  }
2098 2095                  pa[i++] = p;
2099 2096          }
2100 2097  
2101 2098          err = nvlist_add_nvlist_array(f, FM_FMRI_HC_LIST, pa, depth);
2102 2099          if (err == 0) {
2103 2100                  for (i = 0; i < depth; i++)
2104      -                        if (pa[i] != NULL)
2105      -                                nvlist_free(pa[i]);
     2101 +                        nvlist_free(pa[i]);
2106 2102                  return (f);
2107 2103          }
2108 2104          failure = "addition of hc-pair array to FMRI failed";
2109 2105  
2110 2106  boom:
2111 2107          for (i = 0; i < depth; i++)
2112      -                if (pa[i] != NULL)
2113      -                        nvlist_free(pa[i]);
     2108 +                nvlist_free(pa[i]);
2114 2109          nvlist_free(f);
2115 2110          out(O_DIE, "%s", failure);
2116 2111          /*NOTREACHED*/
2117 2112          return (NULL);
2118 2113  }
2119 2114  
2120 2115  static uint8_t
2121 2116  percentof(uint_t part, uint_t whole)
2122 2117  {
2123 2118          unsigned long long p = part * 1000;
↓ open down ↓ 10 lines elided ↑ open up ↑
2134 2129  
2135 2130  static void publish_suspects(struct fme *fmep, struct rsl *srl);
2136 2131  
2137 2132  /*
2138 2133   *  rslfree -- free internal members of struct rsl not expected to be
2139 2134   *      freed elsewhere.
2140 2135   */
2141 2136  static void
2142 2137  rslfree(struct rsl *freeme)
2143 2138  {
2144      -        if (freeme->asru != NULL)
2145      -                nvlist_free(freeme->asru);
2146      -        if (freeme->fru != NULL)
2147      -                nvlist_free(freeme->fru);
2148      -        if (freeme->rsrc != NULL && freeme->rsrc != freeme->asru)
     2139 +        nvlist_free(freeme->asru);
     2140 +        nvlist_free(freeme->fru);
     2141 +        if (freeme->rsrc != freeme->asru)
2149 2142                  nvlist_free(freeme->rsrc);
2150 2143  }
2151 2144  
2152 2145  /*
2153 2146   *  rslcmp -- compare two rsl structures.  Use the following
2154 2147   *      comparisons to establish cardinality:
2155 2148   *
2156 2149   *      1. Name of the suspect's class. (simple strcmp)
2157 2150   *      2. Name of the suspect's ASRU. (trickier, since nvlist)
2158 2151   *
↓ open down ↓ 2151 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX