---
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/(a)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/(a)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