Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix memory leak for request items.
Vsevolod Stakhov committed 11 years ago
commit 858928da43ef89d98bd8a245521720ca692cecd4
parent 13f902a
3 files changed +23 -7
modified libpkg/pkg_jobs.c
@@ -128,6 +128,20 @@ pkg_jobs_pattern_free(struct job_pattern *jp)
}

void
+
pkg_jobs_request_free(struct pkg_job_request *req)
+
{
+
	struct pkg_job_request_item *it, *tmp;
+

+
	if (req != NULL) {
+
		DL_FOREACH_SAFE(req->item, it, tmp) {
+
			free(it);
+
		}
+

+
		free(req);
+
	}
+
}
+

+
void
pkg_jobs_free(struct pkg_jobs *j)
{
	struct pkg_job_request *req, *tmp;
@@ -137,13 +151,11 @@ pkg_jobs_free(struct pkg_jobs *j)

	HASH_ITER(hh, j->request_add, req, tmp) {
		HASH_DEL(j->request_add, req);
-
		/* XXX: need to free all items */
-
		free(req);
+
		pkg_jobs_request_free(req);
	}
	HASH_ITER(hh, j->request_delete, req, tmp) {
		HASH_DEL(j->request_delete, req);
-
		/* XXX: need to free all items */
-
		free(req);
+
		pkg_jobs_request_free(req);
	}

	pkg_jobs_universe_free(j->universe);
modified libpkg/pkg_jobs_universe.c
@@ -827,8 +827,7 @@ pkg_jobs_universe_process_upgrade_chains(struct pkg_jobs *j)
			pkg_debug(1, "removing %s from the request as it is locked",
				cur->pkg->uid);
			HASH_DEL(j->request_add, req);
-
			/* XXX: need to free all items */
-
			free(req);
+
			pkg_jobs_request_free(req);
		}
		else if (vercnt > 1) {
			/*
@@ -863,7 +862,7 @@ pkg_jobs_universe_process_upgrade_chains(struct pkg_jobs *j)
						DL_FOREACH(req->item, rit) {
							if (rit->unit == cur) {
								DL_DELETE(req->item, rit);
-
								/* XXX: need to free it here */
+
								free(rit);
								break;
							}
						}
modified libpkg/private/pkg_jobs.h
@@ -251,4 +251,9 @@ struct pkg_job_universe_item*
pkg_jobs_universe_get_upgrade_candidates(struct pkg_jobs_universe *universe,
	const char *uid, struct pkg *lp, bool force);

+
/*
+
 * Free job request (with all candidates)
+
 */
+
void pkg_jobs_request_free(struct pkg_job_request *req);
+

#endif /* PKG_JOBS_H_ */