From: Michael Tremer Date: Fri, 2 Jul 2021 16:04:36 +0000 (+0000) Subject: Refactor how solutions are being created/freed X-Git-Tag: 0.9.28~1125 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f94b6d9a39ac9f60ed60c1f16e31595cebbd02a;p=pakfire.git Refactor how solutions are being created/freed Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/solution.h b/src/libpakfire/include/pakfire/solution.h index 4e36f73ab..561006e53 100644 --- a/src/libpakfire/include/pakfire/solution.h +++ b/src/libpakfire/include/pakfire/solution.h @@ -27,7 +27,8 @@ struct pakfire_solution; #include -struct pakfire_solution* pakfire_solution_create(struct pakfire_problem* problem, Id id); +int pakfire_solution_create(struct pakfire_solution** solution, + struct pakfire_problem* problem, Id id); struct pakfire_solution* pakfire_solution_ref(struct pakfire_solution* solution); struct pakfire_solution* pakfire_solution_unref(struct pakfire_solution* solution); diff --git a/src/libpakfire/problem.c b/src/libpakfire/problem.c index 2e8ec982f..e92950903 100644 --- a/src/libpakfire/problem.c +++ b/src/libpakfire/problem.c @@ -263,12 +263,13 @@ PAKFIRE_EXPORT struct pakfire_request* pakfire_problem_get_request(struct pakfir } PAKFIRE_EXPORT struct pakfire_solution* pakfire_problem_get_solutions(struct pakfire_problem* problem) { + struct pakfire_solution* s = NULL; struct pakfire_solution* ret = NULL; Solver* solver = pakfire_request_get_solver(problem->request); Id solution = 0; while ((solution = solver_next_solution(solver, problem->id, solution)) != 0) { - struct pakfire_solution* s = pakfire_solution_create(problem, solution); + pakfire_solution_create(&s, problem, solution); if (ret) pakfire_solution_append(ret, s); diff --git a/src/libpakfire/solution.c b/src/libpakfire/solution.c index 2459b8287..841150f40 100644 --- a/src/libpakfire/solution.c +++ b/src/libpakfire/solution.c @@ -120,25 +120,24 @@ static void import_elements(struct pakfire_solution* solution) { pakfire_request_unref(request); } -PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_create(struct pakfire_problem* problem, Id id) { - Pakfire pakfire = pakfire_problem_get_pakfire(problem); +PAKFIRE_EXPORT int pakfire_solution_create(struct pakfire_solution** solution, + struct pakfire_problem* problem, Id id) { + struct pakfire_solution* s = calloc(1, sizeof(*s)); + if (!s) + return 1; - struct pakfire_solution* solution = calloc(1, sizeof(*solution)); - if (solution) { - DEBUG(pakfire, "Allocated Solution at %p\n", solution); - solution->pakfire = pakfire_ref(pakfire); - solution->nrefs = 1; + s->pakfire = pakfire_problem_get_pakfire(problem); + s->nrefs = 1; - solution->problem = pakfire_problem_ref(problem); - solution->id = id; + // Store a reference to the problem + s->problem = pakfire_problem_ref(problem); + s->id = id; - // Extract information from solver - import_elements(solution); - } - - pakfire_unref(pakfire); + // Extract information from solver + import_elements(s); - return solution; + *solution = s; + return 0; } PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_ref(struct pakfire_solution* solution) { @@ -148,7 +147,6 @@ PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_ref(struct pakfire_solu } static void pakfire_solution_free(struct pakfire_solution* solution) { - DEBUG(solution->pakfire, "Releasing Solution at %p\n", solution); pakfire_unref(solution->pakfire); if (solution->next)