Index: virsh.c
===================================================================
RCS file: /data/cvs/libvirt/src/virsh.c,v
retrieving revision 1.97
diff -u -p -r1.97 virsh.c
--- virsh.c	16 Aug 2007 13:21:36 -0000	1.97
+++ virsh.c	17 Aug 2007 10:05:53 -0000
@@ -1005,7 +1005,7 @@ cmdSchedinfo(vshControl * ctl, vshCmd * 
 {
     char *schedulertype;
     virDomainPtr dom;
-    virSchedParameterPtr params;
+    virSchedParameterPtr params = NULL;
     int i, ret;
     int nparams = 0;
     int nr_inputparams = 0;
@@ -1016,6 +1016,7 @@ cmdSchedinfo(vshControl * ctl, vshCmd * 
     int cap;
     char str_weight[] = "weight";
     char str_cap[]    = "cap";
+    int ret_val = FALSE;
 
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;
@@ -1032,8 +1033,7 @@ cmdSchedinfo(vshControl * ctl, vshCmd * 
 
     params = vshMalloc(ctl, sizeof (virSchedParameter) * nr_inputparams);
     if (params == NULL) {
-	virDomainFree(dom);
-        return FALSE;
+        goto cleanup;
     }
 
     if (weightfound) {
@@ -1057,11 +1057,11 @@ cmdSchedinfo(vshControl * ctl, vshCmd * 
     if (inputparams > 0) {
         ret = virDomainSetSchedulerParameters(dom, params, inputparams);
         if (ret == -1) {
-	    virDomainFree(dom);
-	    return FALSE;
+            goto cleanup;
 	}
     }
     free(params);
+    params = NULL;
 
     /* Print SchedulerType */
     schedulertype = virDomainGetSchedulerType(dom, &nparams);
@@ -1071,21 +1071,23 @@ cmdSchedinfo(vshControl * ctl, vshCmd * 
         free(schedulertype);
     } else {
         vshPrint(ctl, "%-15s: %s\n", _("Scheduler"), _("Unknown"));
-	virDomainFree(dom);
-        return FALSE;
+        goto cleanup;
     }
 
     /* Get SchedulerParameters */
     params = vshMalloc(ctl, sizeof(virSchedParameter)* nparams);
+    if (params == NULL) {
+        goto cleanup;
+    }
     for (i = 0; i < nparams; i++){
         params[i].type = 0;
         memset (params[i].field, 0, sizeof params[i].field);
     }
     ret = virDomainGetSchedulerParameters(dom, params, &nparams);
     if (ret == -1) {
-        virDomainFree(dom);
-        return FALSE;
+        goto cleanup;
     }
+    ret_val = TRUE;
     if(nparams){
         for (i = 0; i < nparams; i++){
             switch (params[i].type) {
@@ -1112,9 +1114,11 @@ cmdSchedinfo(vshControl * ctl, vshCmd * 
             }
         }
     }
-    free(params);
+ cleanup:
+    if (params)
+        free(params);
     virDomainFree(dom);
-    return TRUE;
+    return ret_val;
 }
 
 /*
