Dylan Baker
179a0560a6
ci: run meson test with the address sanitizer enabled
...
Set the ASAN_OPTION so that the exitcode is not 1, this avoids asan
returning the exitcode that the tests already expect from a normal
pkgconf error
2022-08-04 15:52:10 -07:00
Dylan Baker
1cfa2d1e20
pkg: prevent circular ownership
...
Otherwise in a case where A references B, and B references A, A and B
will have mutual ownership of each other and prevent each other from
being free'd.
2022-08-04 15:52:10 -07:00
Dylan Baker
301d8fa0c6
queue: free unused dependencies when flattening
2022-08-04 15:52:10 -07:00
Dylan Baker
34b110200a
dependency: zero list after freeing
2022-08-04 15:52:10 -07:00
Dylan Baker
e71a5a3370
dependency: add debug information for dependency refcounting
2022-08-04 15:52:10 -07:00
Dylan Baker
4934205737
pkg: add name of pkg being refed/unrefed to debug outpu
2022-08-04 15:52:10 -07:00
Dylan Baker
a46ce3672f
queue: when collecting dependents don't iterate private twice
...
Currently, the private field is iterated collecting private deps and
normal deps. It should only be iterated when collecting private deps.
2022-08-04 15:52:10 -07:00
Dylan Baker
4493a322f6
main: do cleanup when checking required version
2022-08-04 15:52:10 -07:00
Dylan Baker
a391f9b650
pkg: use goto cleanup idiom
2022-08-04 15:52:10 -07:00
Dylan Baker
38103134a5
main: goto cleanup in validate case too
...
This fixes leaks in two tests
2022-08-04 15:52:10 -07:00
Dylan Baker
171738024e
cache: clear the cache with pkgconf_cache_remove
...
Which results in more code re-use.
2022-08-04 15:52:10 -07:00
Dylan Baker
e4d1c8ffa5
queue: when flattening do nothing if the flattened deps are empty
2022-08-04 15:52:10 -07:00
Dylan Baker
6609001114
queue: unref dependency in all cases
2022-08-04 15:52:10 -07:00
Dylan Baker
e275594ba6
queue: ensure cleanup happens when applying
2022-08-04 15:52:10 -07:00
Dylan Baker
4a1119aa2a
dependency: Fix reference counting of dependency_addraw
...
We only want a reference to be added for the value inserted into the
list, not the one returned. The returned one is unowned until it reaches
the public dependency_add function, which returns an owned pointer
instead. This makes things semantically more correct.
Unfortunately, this means in a few cases we have to write some ugly
code like:
```c
pkgconf_dependency_t *dep = pkgcond_dependency_add("args");
pkgconf_dependency_unref(dep->owner, dep);
```
2022-08-04 15:52:10 -07:00
Dylan Baker
a4de6235c2
cache: when removing a package from the cache unset the cached flag
2022-08-04 15:52:10 -07:00
Dylan Baker
ebe74fd253
cache: free the cache table when it is empty and set to NULL
...
We do the latter for the benefit of libpkgconf. This cleans up a
significant number of memory leaks in the cache handling.
2022-08-04 15:52:10 -07:00