[pacman-dev] [PATCH 3/6] Only compile delta regex once

Dan McGee dpmcgee at gmail.com
Mon Jan 2 13:59:37 EST 2012


On Sun, Jan 1, 2012 at 10:49 PM, Allan McRae <allan at archlinux.org> wrote:
> 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 at 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...

Good catch of course, my rebase-foo was not working well and this got
swallowed into a different patch- thanks for actually testing these.
:)

-Dan


More information about the pacman-dev mailing list