• Show log

    Commit

  • Hash : 56b203a5
    Author : Patrick Steinhardt
    Date : 2019-10-24T12:20:27

    config_file: keep reference to config entries when creating iterator
    
    When creating a configuration file iterator, then we first refresh the
    backend and then afterwards duplicate all refreshed configuration
    entries into the iterator in order to avoid seeing any concurrent
    modifications of the entries while iterating. The duplication of entries
    is not guarded, though, as we do not increase the refcount of the
    entries that we duplicate right now. This opens us up for a race, as
    another thread may concurrently refresh the repository configuration and
    thus swap out the current set of entries. As we didn't increase the
    refcount, this may lead to the entries being free'd while we iterate
    over them in the first thread.
    
    Fix the issue by properly handling the lifecycle of the backend's
    entries via `config_file_entries_take` and `git_config_entries_free`,
    respectively.