--- src/libvirt.c | 74 ++++++++++++++++++++++++++++++--------------------------- 1 files changed, 39 insertions(+), 35 deletions(-) diff --git a/src/libvirt.c b/src/libvirt.c index 1ba2662..ce39a28 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -195,7 +195,7 @@ PHP_MINFO_FUNCTION(libvirt) Arguments: @msg [string]: error message string Returns: None */ -void set_error(char *msg) +void set_error(char *msg TSRMLS_DC) { php_error_docref(NULL TSRMLS_CC, E_WARNING,"%s",msg); if (LIBVIRT_G (last_error)!=NULL) efree(LIBVIRT_G (last_error)); @@ -203,10 +203,11 @@ void set_error(char *msg) } /* Error handler for receiving libvirt errors */ -static void catch_error(void *userData ATTRIBUTE_UNUSED, +static void catch_error(void *userData, virErrorPtr error) { - set_error(error->message); + TSRMLS_FETCH_FROM_CTX(userData); + set_error(error->message TSRMLS_CC); } @@ -414,7 +415,10 @@ PHP_MINIT_FUNCTION(libvirt) /* Initialize libvirt and set up error callback */ virInitialize(); - virSetErrorFunc(NULL, catch_error); + + void *thread_ctx = NULL; + TSRMLS_SET_CTX(thread_ctx); + virSetErrorFunc(thread_ctx, catch_error); return SUCCESS; } @@ -597,7 +601,7 @@ PHP_FUNCTION(libvirt_connect) if (libVer<6002) { - set_error("Only libvirt 0.6.2 and higher supported. Please upgrade your libvirt"); + set_error("Only libvirt 0.6.2 and higher supported. Please upgrade your libvirt" TSRMLS_CC); RETURN_FALSE; } @@ -1503,7 +1507,7 @@ PHP_FUNCTION(libvirt_domain_memory_stats) #else PHP_FUNCTION(libvirt_domain_memory_stats) { - set_error("Only libvirt 0.7.5 and higher supports getting the job information"); + set_error("Only libvirt 0.7.5 and higher supports getting the job information" TSRMLS_CC); } #endif @@ -1534,7 +1538,7 @@ PHP_FUNCTION(libvirt_domain_update_device) #else PHP_FUNCTION(libvirt_domain_update_device) { - set_error("Only libvirt 0.8.0 and higher supports updating the device information"); + set_error("Only libvirt 0.8.0 and higher supports updating the device information" TSRMLS_CC); } #endif @@ -1591,19 +1595,19 @@ PHP_FUNCTION(libvirt_domain_get_network_info) { /* Get XML for the domain */ xml=virDomainGetXMLDesc(domain->domain, VIR_DOMAIN_XML_INACTIVE); if (xml==NULL) { - set_error("Cannot get domain XML"); + set_error("Cannot get domain XML" TSRMLS_CC); RETURN_FALSE; } snprintf(fnpath, sizeof(fnpath), "//domain/devices/interface[@type='network']/mac[@address='%s']/../source/@network", mac); tmp = get_string_from_xpath(xml, fnpath, NULL, &retval); if (tmp == NULL) { - set_error("Invalid XPath node for source network"); + set_error("Invalid XPath node for source network" TSRMLS_CC); RETURN_FALSE; } if (retval < 0) { - set_error("Cannot get XPath expression result for network source"); + set_error("Cannot get XPath expression result for network source" TSRMLS_CC); RETURN_FALSE; } @@ -1644,7 +1648,7 @@ PHP_FUNCTION(libvirt_domain_get_block_info) { /* Get XML for the domain */ xml=virDomainGetXMLDesc(domain->domain, VIR_DOMAIN_XML_INACTIVE); if (xml==NULL) { - set_error("Cannot get domain XML"); + set_error("Cannot get domain XML" TSRMLS_CC); RETURN_FALSE; } @@ -1653,7 +1657,7 @@ PHP_FUNCTION(libvirt_domain_get_block_info) { tmp = get_string_from_xpath(xml, fnpath, NULL, &retval); if (retval < 0) { - set_error("Cannot get XPath expression result for device storage"); + set_error("Cannot get XPath expression result for device storage" TSRMLS_CC); RETURN_FALSE; } @@ -1661,21 +1665,21 @@ PHP_FUNCTION(libvirt_domain_get_block_info) { snprintf(fnpath, sizeof(fnpath), "//domain/devices/disk/target[@dev='%s']/../source/@file", dev); tmp = get_string_from_xpath(xml, fnpath, NULL, &retval); if (retval < 0) { - set_error("Cannot get XPath expression result for file storage"); + set_error("Cannot get XPath expression result for file storage" TSRMLS_CC); RETURN_FALSE; } isFile = 1; } if (retval == 0) { - set_error("No relevant node found"); + set_error("No relevant node found" TSRMLS_CC); RETURN_FALSE; } retval=virDomainGetBlockInfo(domain->domain, tmp, &info,0); if (retval == -1) { - set_error("Cannot get domain block information"); + set_error("Cannot get domain block information" TSRMLS_CC); RETURN_FALSE; } @@ -1700,7 +1704,7 @@ PHP_FUNCTION(libvirt_domain_get_block_info) { #else PHP_FUNCTION(libvirt_domain_get_block_info) { - set_error("Only libvirt 0.8.0 and higher supports getting the block information"); + set_error("Only libvirt 0.8.0 and higher supports getting the block information" TSRMLS_CC); RETURN_FALSE; } #endif @@ -1912,7 +1916,7 @@ PHP_FUNCTION(libvirt_domain_get_job_info) #else PHP_FUNCTION(libvirt_domain_get_job_info) { - set_error("Only libvirt 0.7.7 and higher supports getting the job information"); + set_error("Only libvirt 0.7.7 and higher supports getting the job information" TSRMLS_CC); RETURN_FALSE; } #endif @@ -2902,7 +2906,7 @@ PHP_FUNCTION(libvirt_nodedev_get) GET_CONNECTION_FROM_ARGS("rs",&zconn,&name,&name_len); if ((dev = virNodeDeviceLookupByName(conn->conn, name)) == NULL) { - set_error("Cannot get find requested node device"); + set_error("Cannot get find requested node device" TSRMLS_CC); RETURN_FALSE; } @@ -2961,7 +2965,7 @@ PHP_FUNCTION(libvirt_nodedev_get_xml_desc) xml=virNodeDeviceGetXMLDesc(nodedev->device, 0); if ( xml == NULL ) { - set_error("Cannot get the device XML information"); + set_error("Cannot get the device XML information" TSRMLS_CC); RETURN_FALSE; } @@ -2987,7 +2991,7 @@ PHP_FUNCTION(libvirt_nodedev_get_information) xml=virNodeDeviceGetXMLDesc(nodedev->device, 0); if ( xml == NULL ) { - set_error("Cannot get the device XML information"); + set_error("Cannot get the device XML information" TSRMLS_CC); RETURN_FALSE; } @@ -2996,12 +3000,12 @@ PHP_FUNCTION(libvirt_nodedev_get_information) /* Get name */ tmp = get_string_from_xpath(xml, "//device/name", NULL, &retval); if (tmp == NULL) { - set_error("Invalid XPath node for device name"); + set_error("Invalid XPath node for device name" TSRMLS_CC); RETURN_FALSE; } if (retval < 0) { - set_error("Cannot get XPath expression result for device name"); + set_error("Cannot get XPath expression result for device name" TSRMLS_CC); RETURN_FALSE; } @@ -3117,7 +3121,7 @@ PHP_FUNCTION(libvirt_network_get) GET_CONNECTION_FROM_ARGS("rs",&zconn,&name,&name_len); if ((net = virNetworkLookupByName(conn->conn, name)) == NULL) { - set_error("Cannot get find requested network"); + set_error("Cannot get find requested network" TSRMLS_CC); RETURN_FALSE; } @@ -3145,7 +3149,7 @@ PHP_FUNCTION(libvirt_network_get_bridge) name = virNetworkGetBridgeName(network->network); if (name == NULL) { - set_error("Cannot get network bridge name"); + set_error("Cannot get network bridge name" TSRMLS_CC); RETURN_FALSE; } @@ -3169,7 +3173,7 @@ PHP_FUNCTION(libvirt_network_get_active) res = virNetworkIsActive(network->network); if (res == -1) { - set_error("Error getting virtual network state"); + set_error("Error getting virtual network state" TSRMLS_CC); RETURN_FALSE; } @@ -3197,7 +3201,7 @@ PHP_FUNCTION(libvirt_network_get_information) xml=virNetworkGetXMLDesc(network->network, 0); if (xml==NULL) { - set_error("Cannot get network XML"); + set_error("Cannot get network XML" TSRMLS_CC); RETURN_FALSE; } @@ -3206,12 +3210,12 @@ PHP_FUNCTION(libvirt_network_get_information) /* Get name */ tmp = get_string_from_xpath(xml, "//network/name", NULL, &retval); if (tmp == NULL) { - set_error("Invalid XPath node for network name"); + set_error("Invalid XPath node for network name" TSRMLS_CC); RETURN_FALSE; } if (retval < 0) { - set_error("Cannot get XPath expression result for network name"); + set_error("Cannot get XPath expression result for network name" TSRMLS_CC); RETURN_FALSE; } @@ -3220,12 +3224,12 @@ PHP_FUNCTION(libvirt_network_get_information) /* Get gateway IP address */ tmp = get_string_from_xpath(xml, "//network/ip/@address", NULL, &retval); if (tmp == NULL) { - set_error("Invalid XPath node for network gateway IP address"); + set_error("Invalid XPath node for network gateway IP address" TSRMLS_CC); RETURN_FALSE; } if (retval < 0) { - set_error("Cannot get XPath expression result for network gateway IP address"); + set_error("Cannot get XPath expression result for network gateway IP address" TSRMLS_CC); RETURN_FALSE; } @@ -3234,12 +3238,12 @@ PHP_FUNCTION(libvirt_network_get_information) /* Get netmask */ tmp2 = get_string_from_xpath(xml, "//network/ip/@netmask", NULL, &retval); if (tmp2 == NULL) { - set_error("Invalid XPath node for network mask"); + set_error("Invalid XPath node for network mask" TSRMLS_CC); RETURN_FALSE; } if (retval < 0) { - set_error("Cannot get XPath expression result for network mask"); + set_error("Cannot get XPath expression result for network mask" TSRMLS_CC); RETURN_FALSE; } @@ -3289,7 +3293,7 @@ PHP_FUNCTION(libvirt_network_set_active) GET_NETWORK_FROM_ARGS("rl",&znetwork,&act); if ((act != 0) && (act != 1)) { - set_error("Invalid network activity state"); + set_error("Invalid network activity state" TSRMLS_CC); RETURN_FALSE; } @@ -3331,7 +3335,7 @@ PHP_FUNCTION(libvirt_network_get_xml_desc) xml=virNetworkGetXMLDesc(network->network, 0); if (xml==NULL) { - set_error("Cannot get network XML"); + set_error("Cannot get network XML" TSRMLS_CC); RETURN_FALSE; } @@ -3416,7 +3420,7 @@ PHP_FUNCTION(libvirt_check_version) RETURN_TRUE; } else - set_error("Invalid version type"); + set_error("Invalid version type" TSRMLS_CC); RETURN_FALSE; } -- 1.7.4.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list