]> git.ipfire.org Git - pakfire.git/commitdiff
Free problems when interating multiple times
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 3 Jul 2021 14:21:42 +0000 (14:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 3 Jul 2021 14:21:42 +0000 (14:21 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/pakfire.c

index 295a1fdcbb16d85e8202f04a84a155d431f665f5..1d54b9288d293ab57aad7f277da54b0e49c977e8 100644 (file)
@@ -1626,9 +1626,18 @@ static int pakfire_perform_transaction(Pakfire pakfire,
 
                        // Dependency error
                        case 2:
+                               if (!problems)
+                                       goto ERROR;
+
+                               // Let the user choose a problem
                                r = pakfire_ui_pick_solution(pakfire, request, problems);
                                if (r)
                                        goto ERROR;
+
+                               // Free problems
+                               for (struct pakfire_problem** problem = problems; *problem; problem++)
+                                       pakfire_problem_unref(*problem);
+                               free(problems);
                                break;
 
                        // Another error occured
@@ -1716,9 +1725,18 @@ static int pakfire_perform_transaction_simple(Pakfire pakfire,
 
                        // Dependency error
                        case 2:
+                               if (!problems)
+                                       goto ERROR;
+
+                               // Let the user choose a problem
                                r = pakfire_ui_pick_solution(pakfire, request, problems);
                                if (r)
                                        goto ERROR;
+
+                               // Free problems
+                               for (struct pakfire_problem** problem = problems; *problem; problem++)
+                                       pakfire_problem_unref(*problem);
+                               free(problems);
                                break;
 
                        // Another error occured