|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [PATCH] Save/Restore Support: Fix defects introduced to MiniOS.
Fix memory leaks and memory management bugs introduced to MiniOS by
lastest commits.
Signed-off-by: Bruno Alvisio <bruno.alvisio@xxxxxxxxx>
---
netfront.c | 16 +++++++++-------
xenbus/xenbus.c | 5 ++++-
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/netfront.c b/netfront.c
index 50b3a57..ad40076 100644
--- a/netfront.c
+++ b/netfront.c
@@ -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;
@@ -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;
@@ -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;
@@ -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__);
@@ -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;
}
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);
}
}
@@ -542,7 +547,6 @@ done:
return dev;
error:
- free(msg);
free(err);
free_netfront(dev);
return NULL;
@@ -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) {
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;
+ }
free(rep);
}
}
--
2.7.4
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |