Sorry for the late review...
> diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
> index 4f7efdb..eb6be32 100644
> --- a/src/phyp/phyp_driver.c
> +++ b/src/phyp/phyp_driver.c
> @@ -1849,41 +1849,32 @@ phypUUIDTable_Init(virConnectPtr conn)
> {
> uuid_tablePtr uuid_table;
> phyp_driverPtr phyp_driver;
> - int nids = 0;
> + int nids_numdomains = 0;
> + int nids_listdomains = 0;
> int *ids = NULL;
> unsigned int i = 0;
>
> - if ((nids = phypNumDomainsGeneric(conn, 2))< 0)
> + if ((nids_numdomains = phypNumDomainsGeneric(conn, 2))< 0)
> + goto err;
> +
> + if ((nids_listdomains =
> + phypListDomainsGeneric(conn, ids, nids_listdomains, 1))< 0)
I think you want to call
phypListDomainsGeneric(conn, ids, nids_numdomains, 1)
instead of
phypListDomainsGeneric(conn, ids, nids_listdomains, 1)
Also, you have to move the allocation of ids before the call to
phypListDomainsGeneric. Otherwise you're calling
phypListDomainsGeneric with ids = NULL resulting in a segfault.
Because you currently pass nids_listdomains (which is always 0 at this
point) to phypListDomainsGeneric you don't trigger the segfault.
Thanks for the comments, all fixed :-)
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index 8a9c7a6..423c95d 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -1857,41 +1857,33 @@ phypUUIDTable_Init(virConnectPtr conn)
{
uuid_tablePtr uuid_table;
phyp_driverPtr phyp_driver;
- int nids = 0;
+ int nids_numdomains = 0;
+ int nids_listdomains = 0;
int *ids = NULL;
unsigned int i = 0;
- if ((nids = phypNumDomainsGeneric(conn, 2)) < 0)
+ if ((nids_numdomains = phypNumDomainsGeneric(conn, 2)) < 0)
goto err;
- /* exit early if there are no domains */
- if (nids == 0)
- return 0;
-
- if (VIR_ALLOC_N(ids, nids) < 0) {
+ if (VIR_ALLOC_N(ids, nids_numdomains) < 0) {
virReportOOMError();
goto err;
}
- if ((nids = phypListDomainsGeneric(conn, ids, nids, 1)) < 0)
+ if ((nids_listdomains =
+ phypListDomainsGeneric(conn, ids, nids_numdomains, 1)) < 0)
goto err;
/* exit early if there are no domains */
- /* FIXME: phypNumDomainsGeneric() returned > 0 but
phypListDomainsGeneric()
- * returned 0. indicates this an error condition?
- * an even stricter check would be to treat
- *
- * phypNumDomainsGeneric() != phypListDomainsGeneric()
- *
- * as an error */
- if (nids == 0) {
- VIR_FREE(ids);
- return 0;
- }
+ if (nids_numdomains != nids_listdomains){
+ VIR_ERROR(_("Unable to determine number of domains."));
+ goto err;
+ }else if (nids_numdomains == 0 && nids_listdomains == 0)
+ goto exit;
phyp_driver = conn->privateData;
uuid_table = phyp_driver->uuid_table;
- uuid_table->nlpars = nids;
+ uuid_table->nlpars = nids_listdomains;
/* try to get the table from server */
if (phypUUIDTable_Pull(conn) == -1) {
--
Eduardo Otubo
Software Engineer
Linux Technology Center
IBM Systems & Technology Group
Mobile: +55 19 8135 0885
eotubo(a)linux.vnet.ibm.com