On 01/01/12 13:07, Dan McGee wrote:
This reduces the number of regcomp() calls when parsing delta entries in the database from once per entry to once for the entire context handle by storing the compiled regex data on the handle itself. Just as we do with the cURL handle, we initialize it the first time it is needed and free it when releasing the handle.
A few other small tweaks to the parsing function also take place, including using the stack to store the transient and short file size string while parsing it.
When parsing a sync database with 1378 delta entries, this reduces the time of a `pacman -Sl deltas` operation by 50% from 0.22s to 0.12s.
Signed-off-by: Dan McGee <dan@archlinux.org> ---
Test database, built from my local cache that was used for above numbers: https://dev.archlinux.org/~dan/deltas.db
Should be useful for delta-related code in general.
lib/libalpm/delta.c | 33 +++++++++++++++++++-------------- lib/libalpm/delta.h | 2 +- lib/libalpm/handle.c | 3 +++ lib/libalpm/handle.h | 5 +++++ 4 files changed, 28 insertions(+), 15 deletions(-)
diff --git a/lib/libalpm/delta.c b/lib/libalpm/delta.c index 165cdef..726f03c 100644 --- a/lib/libalpm/delta.c +++ b/lib/libalpm/delta.c @@ -273,29 +273,32 @@ alpm_list_t SYMEXPORT *alpm_pkg_unused_deltas(alpm_pkg_t *pkg) * This function assumes that the string is in the correct format. * This format is as follows: * $deltafile $deltamd5 $deltasize $oldfile $newfile + * @param handle the context handle * @param line the string to parse * @return A pointer to the new alpm_delta_t object */ -/* TODO this does not really belong here, but in a parsing lib */ -alpm_delta_t *_alpm_delta_parse(char *line) +alpm_delta_t *_alpm_delta_parse(alpm_handle_t *handle, const char *line)
Changed function prototype so should also change the one usage of this function in the codebase... Fixup patch on my patchqueue branch. Allan