From 30195faf953a93c03dac9bdc0254b7deb5de567d Mon Sep 17 00:00:00 2001 From: Chris Austen Date: Fri, 13 Nov 2015 14:39:19 -0600 Subject: ipmid taking too many dbus connections --- ipmid-api.h | 2 ++ ipmid.C | 11 ++++++++--- storageaddsel.C | 11 +---------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/ipmid-api.h b/ipmid-api.h index b3117d5..34d3bbe 100644 --- a/ipmid-api.h +++ b/ipmid-api.h @@ -1,6 +1,7 @@ #ifndef __HOST_IPMID_IPMI_COMMON_H__ #define __HOST_IPMID_IPMI_COMMON_H__ #include +#include // length of Completion Code and its ALWAYS _1_ #define IPMI_CC_LEN 1 @@ -93,4 +94,5 @@ enum ipmi_return_codes IPMI_CC_UNSPECIFIED_ERROR = 0xFF, }; +sd_bus *ipmid_get_sd_bus_connection(void); #endif diff --git a/ipmid.C b/ipmid.C index 0c7be7b..6b1eacc 100644 --- a/ipmid.C +++ b/ipmid.C @@ -15,6 +15,7 @@ sd_bus *bus = NULL; + FILE *ipmiio, *ipmidbus, *ipmicmddetails; void print_usage(void) { @@ -367,6 +368,10 @@ void ipmi_register_callback_handlers(const char* ipmi_lib_path) return; } +sd_bus *ipmid_get_sd_bus_connection(void) { + return bus; +} + int main(int argc, char *argv[]) { sd_bus_slot *slot = NULL; @@ -402,9 +407,6 @@ int main(int argc, char *argv[]) } - // Register all the handlers that provider implementation to IPMI commands. - ipmi_register_callback_handlers(HOST_IPMI_LIB_PATH); - /* Connect to system bus */ r = sd_bus_open_system(&bus); if (r < 0) { @@ -413,6 +415,9 @@ int main(int argc, char *argv[]) goto finish; } + // Register all the handlers that provider implementation to IPMI commands. + ipmi_register_callback_handlers(HOST_IPMI_LIB_PATH); + r = sd_bus_add_match(bus, &slot, FILTER, handle_ipmi_command, NULL); if (r < 0) { fprintf(stderr, "Failed: sd_bus_add_match: %s : %s\n", strerror(-r), FILTER); diff --git a/storageaddsel.C b/storageaddsel.C index 94e037c..64b0e6a 100644 --- a/storageaddsel.C +++ b/storageaddsel.C @@ -159,15 +159,8 @@ int send_esel_to_dbus(const char *desc, const char *sev, const char *details, ui uint16_t *pty; int r; + mbus = ipmid_get_sd_bus_connection(); - - /* Connect to system bus */ - r = sd_bus_open_system(&mbus); - if (r < 0) { - fprintf(stderr, "Failed to connect to system bus: %s\n", - strerror(-r)); - goto finish; - } r = sd_bus_message_new_method_call(mbus,&m, "org.openbmc.records.events", "/org/openbmc/records/events", @@ -208,10 +201,8 @@ finish: sd_bus_error_free(&error); sd_bus_message_unref(m); sd_bus_message_unref(reply); - sd_bus_unref(mbus); return r; - } -- cgit v1.2.1