]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Make Request obscure
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 14 Jan 2018 19:03:25 +0000 (20:03 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 14 Jan 2018 19:03:25 +0000 (20:03 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/_pakfiremodule.c
src/_pakfire/request.c
src/_pakfire/transaction.c
src/libpakfire/include/pakfire/request.h
src/libpakfire/libpakfire.sym
src/libpakfire/problem.c
src/libpakfire/request.c
src/libpakfire/solution.c

index d2c436791a02fc136ae795125d853fbc75c51dcc..ca19a1426c5e1f9c5f3699287a05e0623298ab3d 100644 (file)
@@ -25,6 +25,8 @@
 #include <sched.h>
 #include <sys/personality.h>
 
+#include <solv/solver.h>
+
 #include "archive.h"
 #include "capabilities.h"
 #include "constants.h"
index 05c957aa0e8777a2762f5dfe22cf55799a20cba3..a79f181882b78a2c92922716f034b9f2b2b45a56 100644 (file)
@@ -44,7 +44,7 @@ static PyObject* Request_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
 
 static void Request_dealloc(RequestObject* self) {
        if (self->request)
-               pakfire_request_free(self->request);
+               pakfire_request_unref(self->request);
 
        Py_XDECREF(self->pool);
        Py_TYPE(self)->tp_free((PyObject *)self);
index 5458ae14632952e54c758e9a6f732432dca5839c..30effc904c505bf2a7bb686bd95cb1f0502698db 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <pakfire/package.h>
 #include <pakfire/packagelist.h>
+#include <pakfire/pool.h>
 #include <pakfire/transaction.h>
 
 #include "package.h"
@@ -79,9 +80,10 @@ static int Transaction_init(TransactionObject* self, PyObject* args, PyObject* k
 
        // If request has got no transaction, we will create an (empty) new one.
        if (!self->transaction) {
-               PakfirePool pool = pakfire_request_pool(req);
+               PakfirePool pool = pakfire_request_get_pool(req);
 
                self->transaction = pakfire_transaction_create(pool, NULL);
+               pakfire_pool_unref(pool);
        }
 
        return 0;
index 9343bbf584b8ac243fab4cc10e033ab1d4a8401c..b4a4e5b6b0249b877fb174d853bc6256193ceb0e 100644 (file)
@@ -22,7 +22,6 @@
 #define PAKFIRE_REQUEST_H
 
 #include <solv/queue.h>
-#include <solv/solver.h>
 #include <solv/transaction.h>
 
 #include <pakfire/types.h>
@@ -42,10 +41,11 @@ enum _pakfire_solver_flags {
 };
 
 PakfireRequest pakfire_request_create(PakfirePool pool);
+
 PakfireRequest pakfire_request_ref(PakfireRequest request);
-void pakfire_request_free(PakfireRequest request);
+PakfireRequest pakfire_request_unref(PakfireRequest request);
 
-PakfirePool pakfire_request_pool(PakfireRequest request);
+PakfirePool pakfire_request_get_pool(PakfireRequest request);
 
 int pakfire_request_solve(PakfireRequest request, int flags);
 PakfireProblem pakfire_request_get_problems(PakfireRequest request);
@@ -74,13 +74,9 @@ int pakfire_request_verify(PakfireRequest request);
 
 #ifdef PAKFIRE_PRIVATE
 
-struct _PakfireRequest {
-       PakfirePool pool;
-       Queue queue;
-       Solver* solver;
-       Transaction* transaction;
-       int nrefs;
-};
+#include <solv/solver.h>
+
+Solver* pakfire_request_get_solver(PakfireRequest request);
 
 #endif
 
index 1c62456dd8b2313122618f6a0956a1bd132f49b0..efbba3c7f32d35ecd09856184fef9462f10202c2 100644 (file)
@@ -268,10 +268,10 @@ global:
        # request
        pakfire_request_create;
        pakfire_request_distupgrade;
-       pakfire_request_free;
        pakfire_request_erase;
        pakfire_request_erase_relation;
        pakfire_request_erase_selector;
+       pakfire_request_get_pool;
        pakfire_request_get_problems;
        pakfire_request_get_transaction;
        pakfire_request_install;
@@ -280,12 +280,13 @@ global:
        pakfire_request_lock;
        pakfire_request_lock_relation;
        pakfire_request_lock_selector;
-       pakfire_request_pool;
+       pakfire_request_ref;
        pakfire_request_solve;
        pakfire_request_upgrade;
        pakfire_request_upgrade_all;
        pakfire_request_upgrade_relation;
        pakfire_request_upgrade_selector;
+       pakfire_request_unref;
        pakfire_request_verify;
 
        # selector
index 7cfec1a05b9443f4c581d5dc55b67af6a0f9c7ad..bd8d38d431ce796a1e0212f0babd851d7efb122f 100644 (file)
@@ -27,7 +27,7 @@
 #include <pakfire/util.h>
 
 static char* to_string(PakfireProblem problem) {
-       Solver* solver = problem->request->solver;
+       Solver* solver = pakfire_request_get_solver(problem->request);
        Pool* pool = solver->pool;
 
        // Get the problem rule
@@ -218,7 +218,7 @@ PAKFIRE_EXPORT void pakfire_problem_free(PakfireProblem problem) {
        if (problem->next)
                pakfire_problem_free(problem->next);
 
-       pakfire_request_free(problem->request);
+       pakfire_request_unref(problem->request);
 
        if (problem->string)
                pakfire_free(problem->string);
@@ -247,9 +247,10 @@ PAKFIRE_EXPORT const char* pakfire_problem_to_string(PakfireProblem problem) {
 
 PAKFIRE_EXPORT PakfireSolution pakfire_problem_get_solutions(PakfireProblem problem) {
        PakfireSolution ret = NULL;
+       Solver* solver = pakfire_request_get_solver(problem->request);
 
        Id solution = 0;
-       while ((solution = solver_next_solution(problem->request->solver, problem->id, solution)) != 0) {
+       while ((solution = solver_next_solution(solver, problem->id, solution)) != 0) {
                PakfireSolution s = pakfire_solution_create(problem, solution);
 
                if (ret)
index c241766c140a41c263a6b8c2cd7f6d15143aca8e..9a6eb11c9a49daa8bd36d026bba03d8a29679974 100644 (file)
 #include <pakfire/types.h>
 #include <pakfire/util.h>
 
+struct _PakfireRequest {
+       PakfirePool pool;
+       Queue queue;
+       Solver* solver;
+       Transaction* transaction;
+       int nrefs;
+};
+
 PAKFIRE_EXPORT PakfireRequest pakfire_request_create(PakfirePool pool) {
        PakfireRequest request = pakfire_calloc(1, sizeof(*request));
-       request->pool = pool;
+       if (request) {
+               DEBUG("Allocated Request at %p\n", request);
+               request->nrefs = 1;
 
-       queue_init(&request->queue);
-
-       // Initialise reference counter
-       request->nrefs = 1;
+               request->pool = pakfire_pool_ref(pool);
+               queue_init(&request->queue);
+       }
 
        return request;
 }
@@ -54,9 +63,8 @@ PAKFIRE_EXPORT PakfireRequest pakfire_request_ref(PakfireRequest request) {
        return request;
 }
 
-PAKFIRE_EXPORT void pakfire_request_free(PakfireRequest request) {
-       if (--request->nrefs > 0)
-               return;
+static void pakfire_request_free(PakfireRequest request) {
+       pakfire_pool_unref(request->pool);
 
        if (request->transaction)
                transaction_free(request->transaction);
@@ -65,17 +73,32 @@ PAKFIRE_EXPORT void pakfire_request_free(PakfireRequest request) {
                solver_free(request->solver);
 
        queue_free(&request->queue);
-
        pakfire_free(request);
+
+       DEBUG("Released Request at %p\n", request);
+}
+
+PAKFIRE_EXPORT PakfireRequest pakfire_request_unref(PakfireRequest request) {
+       if (!request)
+               return NULL;
+
+       if (--request->nrefs > 0)
+               return request;
+
+       pakfire_request_free(request);
+       return NULL;
+}
+
+PAKFIRE_EXPORT PakfirePool pakfire_request_get_pool(PakfireRequest request) {
+       return pakfire_pool_ref(request->pool);
 }
 
-PAKFIRE_EXPORT PakfirePool pakfire_request_pool(PakfireRequest request) {
-       return request->pool;
+Solver* pakfire_request_get_solver(PakfireRequest request) {
+       return request->solver;
 }
 
 static void init_solver(PakfireRequest request, int flags) {
-       PakfirePool pool = pakfire_request_pool(request);
-       Pool* p = pakfire_pool_get_solv_pool(pool);
+       Pool* p = pakfire_pool_get_solv_pool(request->pool);
 
        Solver* solver = solver_create(p);
 
index 269dfd137f06f1aea1fca9359f27c5dbb3560e1a..6105a787a08264ee593ebe57d07a35fc83b6ef96 100644 (file)
 #include <pakfire/i18n.h>
 #include <pakfire/private.h>
 #include <pakfire/problem.h>
+#include <pakfire/request.h>
 #include <pakfire/solution.h>
 #include <pakfire/util.h>
 
 static void import_elements(PakfireSolution solution) {
-       Solver* solver = solution->problem->request->solver;
+       Solver* solver = pakfire_request_get_solver(solution->problem->request);
        Pool* pool = solver->pool;
 
        // Reserve memory