// Reference Counter
int nrefs;
+ // SOLV Repo
+ Repo* repo;
+
// Description
char description[MAX_DESCRIPTION];
if (--appdata->nrefs > 0)
return;
+ // If there are no further references, automatically destroy the entire repository
+ repo_free(appdata->repo, 0);
+
free(appdata);
}
-static void pakfire_repo_free(struct pakfire_repo* self, const int free_repo) {
- // Optionally free appdata
- if (free_repo) {
- if (self->repo) {
- if (self->repo->appdata)
- pakfire_repo_free_appdata(self->repo->appdata);
-
- repo_free(self->repo, 0);
- }
- }
-
+static void pakfire_repo_free(struct pakfire_repo* self) {
if (self->appdata)
pakfire_repo_free_appdata(self->appdata);
if (self->mirrorlist)
}
void pakfire_repo_free_all(struct pakfire* pakfire) {
+ Repo* repo = NULL;
+ int i;
+
+ // Fetch the pool
Pool* pool = pakfire_get_solv_pool(pakfire);
if (!pool)
return;
- Repo* repo;
- int i;
-
FOR_REPOS(i, repo) {
if (repo->appdata)
pakfire_repo_free_appdata(repo->appdata);
-
- repo_free(repo, 0);
}
}
// Initialize the reference counter
appdata->nrefs = 2;
+ // Reference the SOLV repository
+ appdata->repo = self->repo;
+
// Refresh Interval: Set to invalid
appdata->refresh = -1;
return 0;
ERROR:
- pakfire_repo_free(self, 1);
+ if (self->appdata)
+ pakfire_repo_free_appdata(self->appdata);
+ pakfire_repo_free(self);
return r;
}
if (--repo->nrefs > 0)
return repo;
- pakfire_repo_free(repo, 0);
+ pakfire_repo_free(repo);
return NULL;
}