[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 1/6] tools/cpupools: Give a name to unnamed cpupools
Hi Luca, On Tue, Apr 05, 2022 at 09:57:36AM +0100, Luca Fancellu wrote: > diff --git a/tools/helpers/xen-init-dom0.c b/tools/helpers/xen-init-dom0.c > index c99224a4b607..84286617790f 100644 > --- a/tools/helpers/xen-init-dom0.c > +++ b/tools/helpers/xen-init-dom0.c > @@ -43,7 +43,9 @@ int main(int argc, char **argv) > int rc; > struct xs_handle *xsh = NULL; > xc_interface *xch = NULL; > - char *domname_string = NULL, *domid_string = NULL; > + char *domname_string = NULL, *domid_string = NULL, *pool_path, > *pool_name; > + xc_cpupoolinfo_t *xcinfo; > + unsigned int pool_id = 0; > libxl_uuid uuid; > > /* Accept 0 or 1 argument */ > @@ -114,6 +116,37 @@ int main(int argc, char **argv) > goto out; > } > > + /* Create an entry in xenstore for each cpupool on the system */ > + do { > + xcinfo = xc_cpupool_getinfo(xch, pool_id); > + if (xcinfo != NULL) { > + if (xcinfo->cpupool_id != pool_id) > + pool_id = xcinfo->cpupool_id; > + xc_cpupool_infofree(xch, xcinfo); > + if (asprintf(&pool_path, "/local/pool/%d/name", pool_id) <= 0) { > + fprintf(stderr, "cannot allocate memory for pool path\n"); > + rc = 1; > + goto out; > + } > + if (asprintf(&pool_name, "Pool-%d", pool_id) <= 0) { > + fprintf(stderr, "cannot allocate memory for pool name\n"); > + rc = 1; > + goto out_err; Could you rework this loop so that "goto out" is always the right things to do in case of error? That is the function would always free() "pool_path" and "pool_name" regardless of their values, and we only need to make sure both are NULL when they are already free. This is to avoid having several path in case of error, as this could result in mistake later. If there's only one error path, there will be less likely to have mistakes. This loop, at the moment, is using three different error paths: "goto out", "goto out_err", and no goto followed by a standalone goto. > + } > + pool_id++; > + if (!xs_write(xsh, XBT_NULL, pool_path, pool_name, > + strlen(pool_name))) { > + fprintf(stderr, "cannot set pool name\n"); > + rc = 1; > + } > + free(pool_name); > +out_err: > + free(pool_path); > + if ( rc ) > + goto out; > + } > + } while(xcinfo != NULL); Thanks, -- Anthony PERARD
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |