#define MAX_KEY 4096
struct pakfire_repo_appdata {
+ // Reference Counter
+ int nrefs;
+
// Description
char description[MAX_DESCRIPTION];
}
static void pakfire_repo_free_appdata(struct pakfire_repo_appdata* appdata) {
- if (appdata)
- free(appdata);
+ // Don't free if something is still holding references
+ if (--appdata->nrefs > 0)
+ return;
+
+ free(appdata);
}
static void pakfire_repo_free(struct pakfire_repo* self, const int free_repo) {
}
}
+ if (self->appdata)
+ pakfire_repo_free_appdata(self->appdata);
if (self->mirrorlist)
pakfire_mirrorlist_unref(self->mirrorlist);
if (self->pakfire)
if (!appdata)
return -errno;
+ // Initialize the reference counter
+ appdata->nrefs = 2;
+
// Refresh Interval: Set to invalid
appdata->refresh = -1;
// Initialize appdata
self->appdata = self->repo->appdata;
+ self->appdata->nrefs++;
// Return the pointer
*repo = self;