summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnatol Pomozov <anatol.pomozov@gmail.com>2020-01-30 06:27:10 +0100
committerAllan McRae <allan@archlinux.org>2020-01-30 15:38:36 +0100
commit886a6677a847a5b7fdc1e44240f90cc81d91b9ad (patch)
tree2f02657317056fb08c61c5e2c6b6e213f2042cb1
parentd0c487d4dcc6fec6f4bd8e1cefa1de9ffbe0e460 (diff)
downloadpacman-886a6677a847a5b7fdc1e44240f90cc81d91b9ad.tar.gz
pacman-886a6677a847a5b7fdc1e44240f90cc81d91b9ad.tar.xz
Eliminate extra loop over dbs_sync
Current flow looks like loop dbs_sync { loop pkgs { if pkg.db == db then process(pkg, db) } } Package sync transaction always has a counterpart in the dbs_sync list (I cannot come up with a use-case when it is not true). So the loop can be simplified to: loop pkgs { process(pkg, pkg.db) } Tested: 'ninja test' & manually by using pacman with this patch for a week Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--lib/libalpm/sync.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index d02a435f..4d93f41f 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -705,16 +705,14 @@ static struct dload_payload *build_payload(alpm_handle_t *handle,
return payload;
}
-static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files)
+static int find_dl_candidates(alpm_handle_t *handle, alpm_list_t **files)
{
- alpm_list_t *i;
- alpm_handle_t *handle = repo->handle;
-
- for(i = handle->trans->add; i; i = i->next) {
+ for(alpm_list_t *i = handle->trans->add; i; i = i->next) {
alpm_pkg_t *spkg = i->data;
- if(spkg->origin != ALPM_PKG_FROM_FILE && repo == spkg->origin_data.db) {
+ if(spkg->origin != ALPM_PKG_FROM_FILE) {
char *fpath = NULL;
+ alpm_db_t *repo = spkg->origin_data.db;
if(!repo->servers) {
handle->pm_errno = ALPM_ERR_SERVER_NONE;
@@ -802,9 +800,7 @@ static int download_files(alpm_handle_t *handle)
handle->totaldlcb(total_size);
}
- for(i = handle->dbs_sync; i; i = i->next) {
- errors += find_dl_candidates(i->data, &files);
- }
+ errors += find_dl_candidates(handle, &files);
if(files) {
/* check for necessary disk space for download */