summaryrefslogtreecommitdiff
path: root/usr/src/lib/libipmi
diff options
context:
space:
mode:
authoreschrock <none@none>2007-09-10 08:13:47 -0700
committereschrock <none@none>2007-09-10 08:13:47 -0700
commit92ba710950bf6ee35de67e1e0b7f20ec9e528106 (patch)
tree516433d5acb9770838f7b475b421b9a1961f5d62 /usr/src/lib/libipmi
parent3c333a60ead07ccabf6df84e8bab4f58efc6237b (diff)
downloadillumos-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.h5
-rw-r--r--usr/src/lib/libipmi/common/ipmi_sdr.c25
-rw-r--r--usr/src/lib/libipmi/common/libipmi.c1
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);
}