[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [PATCH] Save/Restore Support: Fix defects introduced to MiniOS.
Hello, Bruno Alvisio, le mer. 04 juil. 2018 10:57:16 -0700, a ecrit: > @@ -321,6 +321,7 @@ struct netfront_dev *init_netfront(char *_nodename, > if (strcmp(nodename, list->dev->nodename) == 0) { > list->refcount++; > dev = list->dev; > + ldev = list; > if (thenetif_rx) > netfront_set_rx_handler(dev, thenetif_rx, NULL); > goto out; That looks odd: ldev is not used at all until being filled with a malloc. > @@ -474,8 +475,8 @@ again: > err = xenbus_transaction_end(xbt, 0, &retry); > free(err); > if (retry) { > + printk("retrying transaction\n"); > goto again; > - printk("completing transaction\n"); > } > > goto done; Uh, indeed, long-time issue :) > @@ -489,8 +490,10 @@ abort_transaction: > done: > snprintf(path, sizeof(path), "%s/backend", dev->nodename); > msg = xenbus_read(XBT_NIL, path, &dev->backend); > + free(msg); > snprintf(path, sizeof(path), "%s/mac", dev->nodename); > msg = xenbus_read(XBT_NIL, path, &dev->mac); > + free(msg); > > if ((dev->backend == NULL) || (dev->mac == NULL)) { > printk("%s: backend/mac failed\n", __func__); Indeed, but they should be printed before freeing. > @@ -384,7 +385,7 @@ static struct netfront_dev *_init_netfront(struct > netfront_dev *dev, > char **ip) > { > xenbus_transaction_t xbt; > - char* err = NULL; > + char* err = NULL, *err2; > char* message=NULL; > struct netif_tx_sring *txs; > struct netif_rx_sring *rxs; > @@ -513,13 +516,15 @@ done: > err = xenbus_wait_for_state_change(path, &state, &dev->events); > if (state != XenbusStateConnected) { > printk("backend not avalable, state=%d\n", state); > - xenbus_unwatch_path_token(XBT_NIL, path, path); > + err2 = xenbus_unwatch_path_token(XBT_NIL, path, path); > + free(err2); > goto error; > } Rather than introducing an err2 variable, just free(err) after the while loop, and use err here, and it will be freed by the error: label. > > if (ip) { > snprintf(path, sizeof(path), "%s/ip", dev->backend); > - xenbus_read(XBT_NIL, path, ip); > + msg = xenbus_read(XBT_NIL, path, ip); > + free(msg); Similarly, better print the error message before freeing it. > @@ -584,8 +588,6 @@ void shutdown_netfront(struct netfront_dev *dev) > list->refcount--; > if (list->refcount == 0) { > _shutdown_netfront(dev); > - free(dev->nodename); > - free(dev); > > to_del = list; > if (to_del == dev_list) { I don't understand why not freeing them? > diff --git a/xenbus/xenbus.c b/xenbus/xenbus.c > index d72dc3a..695c24d 100644 > --- a/xenbus/xenbus.c > +++ b/xenbus/xenbus.c > @@ -413,8 +413,11 @@ void resume_xenbus(int canceled) > > rep = xenbus_msg_reply(XS_WATCH, XBT_NIL, req, ARRAY_SIZE(req)); > msg = errmsg(rep); > - if (msg) > + if (msg) { > xprintk("error on XS_WATCH: %s\n", msg); > + free(msg); > + return; Why returning? We'd better continue reintroducing the watches which do succeed. > + } > free(rep); > } > } Samuel _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |