commit 7a0b1068b1c1dc1680f5dc45b7a4ea1e9d8a9b9e from: Stefan Sperling date: Mon Oct 11 18:54:08 2021 UTC fix pack index cache element rotation; keep often used entries near the front commit - 10a623dfc23b47f494941e0eac741420c08372a3 commit + 7a0b1068b1c1dc1680f5dc45b7a4ea1e9d8a9b9e blob - 17697cc62656dd554d17df6ee00a548fde19f6e9 blob + f216e0867a7738383ffc5b34e5923ad33c16f541 --- lib/repository.c +++ lib/repository.c @@ -928,19 +928,13 @@ cache_packidx(struct got_repository *repo, struct got_ } } if (i == repo->pack_cache_size) { - err = got_packidx_close(repo->packidx_cache[i - 1]); + i = repo->pack_cache_size - 1; + err = got_packidx_close(repo->packidx_cache[i]); if (err) return err; } - /* - * Insert the new pack index at the front so it will - * be searched first in the future. - */ - memmove(&repo->packidx_cache[1], &repo->packidx_cache[0], - sizeof(repo->packidx_cache) - - sizeof(repo->packidx_cache[0])); - repo->packidx_cache[0] = packidx; + repo->packidx_cache[i] = packidx; return NULL; } @@ -984,10 +978,10 @@ got_repo_search_packidx(struct got_packidx **packidx, * searching a wrong pack index can be expensive. */ if (i > 0) { - struct got_packidx *p; - p = repo->packidx_cache[0]; + memmove(&repo->packidx_cache[1], + &repo->packidx_cache[0], + i * sizeof(repo->packidx_cache[0])); repo->packidx_cache[0] = *packidx; - repo->packidx_cache[i] = p; } return NULL; }