X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fvirt.c;h=830db5136db00a015857a58b53d6d84643d11500;hb=cb262c0e23692b6374d57ad3b3decb0d6c397949;hp=93f9aee30d80bdb2427c3edd86191966326c9c19;hpb=27f2019ddab0d4e93a8c99ee87065fe6a836056e;p=collectd.git diff --git a/src/virt.c b/src/virt.c index 93f9aee3..830db513 100644 --- a/src/virt.c +++ b/src/virt.c @@ -520,6 +520,13 @@ static int lv_connect(void) { return 0; } +static void lv_disconnect(void) { + if (conn != NULL) + virConnectClose(conn); + conn = NULL; + WARNING(PLUGIN_NAME " plugin: closed connection to libvirt"); +} + static int lv_read(user_data_t *ud) { time_t t; struct lv_read_instance *inst = NULL; @@ -544,9 +551,8 @@ static int lv_read(user_data_t *ud) { if ((last_refresh == (time_t)0) || ((interval > 0) && ((last_refresh + interval) <= t))) { if (refresh_lists(inst) != 0) { - if (conn != NULL) - virConnectClose(conn); - conn = NULL; + if (inst->id == 0) + lv_disconnect(); return -1; } last_refresh = t; @@ -930,10 +936,10 @@ static int refresh_lists(struct lv_read_instance *inst) { } /* Block devices. */ - char *bd_xmlpath = "/domain/devices/disk/target[@dev]"; + const char *bd_xmlpath = "/domain/devices/disk/target[@dev]"; if (blockdevice_format == source) bd_xmlpath = "/domain/devices/disk/source[@dev]"; - xpath_obj = xmlXPathEval((xmlChar *)bd_xmlpath, xpath_ctx); + xpath_obj = xmlXPathEval((const xmlChar *)bd_xmlpath, xpath_ctx); if (xpath_obj == NULL || xpath_obj->type != XPATH_NODESET || xpath_obj->nodesetval == NULL) @@ -1172,9 +1178,7 @@ static int lv_shutdown(void) { lv_fini_instance(i); } - if (conn != NULL) - virConnectClose(conn); - conn = NULL; + lv_disconnect(); ignorelist_free(il_domains); il_domains = NULL;