diff options
author | eschrock <none@none> | 2007-09-10 08:13:47 -0700 |
---|---|---|
committer | eschrock <none@none> | 2007-09-10 08:13:47 -0700 |
commit | 92ba710950bf6ee35de67e1e0b7f20ec9e528106 (patch) | |
tree | 516433d5acb9770838f7b475b421b9a1961f5d62 /usr/src/lib/libipmi | |
parent | 3c333a60ead07ccabf6df84e8bab4f58efc6237b (diff) | |
download | illumos-joyent-92ba710950bf6ee35de67e1e0b7f20ec9e528106.tar.gz |
PSARC 2007/455 /etc/{init,utmp}pipe to /var/run
6437243 initpipe and utmppipe fifos prevent efficient searching of /etc/*
6590291 libtopo's Makefile.plugin has a broken lint target
6590293 ipmi_close() doesn't free SDR repository
Diffstat (limited to 'usr/src/lib/libipmi')
-rw-r--r-- | usr/src/lib/libipmi/common/ipmi_impl.h | 5 | ||||
-rw-r--r-- | usr/src/lib/libipmi/common/ipmi_sdr.c | 25 | ||||
-rw-r--r-- | usr/src/lib/libipmi/common/libipmi.c | 1 |
3 files changed, 21 insertions, 10 deletions
diff --git a/usr/src/lib/libipmi/common/ipmi_impl.h b/usr/src/lib/libipmi/common/ipmi_impl.h index 619b048186..0a22c061d7 100644 --- a/usr/src/lib/libipmi/common/ipmi_impl.h +++ b/usr/src/lib/libipmi/common/ipmi_impl.h @@ -83,6 +83,11 @@ extern void *impi_realloc(ipmi_handle_t *, void *, size_t); */ extern ipmi_transport_t ipmi_transport_bmc; +/* + * Miscellaneous routines + */ +extern void ipmi_sdr_clear(ipmi_handle_t *); + #ifdef __cplusplus } #endif diff --git a/usr/src/lib/libipmi/common/ipmi_sdr.c b/usr/src/lib/libipmi/common/ipmi_sdr.c index 052bb2f89b..75aa33ab07 100644 --- a/usr/src/lib/libipmi/common/ipmi_sdr.c +++ b/usr/src/lib/libipmi/common/ipmi_sdr.c @@ -78,16 +78,7 @@ ipmi_sdr_refresh(ipmi_handle_t *ihp) ipmi_sdr_generic_locator_t *gen_src, *gen_dst; ipmi_sdr_fru_locator_t *fru_src, *fru_dst; - /* - * Free any existing SDRs. - */ - while (ihp->ih_sdr_cache != NULL) { - ent = ihp->ih_sdr_cache->isc_next; - ipmi_free(ihp, ent->isc_generic); - ipmi_free(ihp, ent->isc_fru); - ipmi_free(ihp, ent); - ihp->ih_sdr_cache = ent; - } + ipmi_sdr_clear(ihp); /* * Iterate over all existing SDRs and add them to the cache. @@ -147,6 +138,20 @@ ipmi_sdr_refresh(ipmi_handle_t *ihp) return (0); } +void +ipmi_sdr_clear(ipmi_handle_t *ihp) +{ + ipmi_sdr_cache_ent_t *ent, *next; + + while ((ent = ihp->ih_sdr_cache) != NULL) { + next = ent->isc_next; + ipmi_free(ihp, ent->isc_generic); + ipmi_free(ihp, ent->isc_fru); + ipmi_free(ihp, ent); + ihp->ih_sdr_cache = next; + } +} + ipmi_sdr_t * ipmi_sdr_get(ipmi_handle_t *ihp, uint16_t id, uint16_t *next) { diff --git a/usr/src/lib/libipmi/common/libipmi.c b/usr/src/lib/libipmi/common/libipmi.c index 84d5c51690..edc4609691 100644 --- a/usr/src/lib/libipmi/common/libipmi.c +++ b/usr/src/lib/libipmi/common/libipmi.c @@ -70,6 +70,7 @@ ipmi_close(ipmi_handle_t *ihp) { if (ihp->ih_transport && ihp->ih_tdata) ihp->ih_transport->it_close(ihp->ih_tdata); + ipmi_sdr_clear(ihp); free(ihp); } |