Quoting Janusz Krzysztofik (2022-02-18 17:08:41) > Hi Chris, > > On Friday, 18 February 2022 17:03:01 CET Chris Wilson wrote: > > Quoting Janusz Krzysztofik (2022-02-18 15:19:35) > > > @@ -206,15 +229,19 @@ static struct pci_device *__igt_device_get_pci_device(int fd) > > > igt_warn("Couldn't find PCI device %04x:%02x:%02x:%02x\n", > > > pci_addr.domain, pci_addr.bus, > > > pci_addr.device, pci_addr.function); > > > - return NULL; > > > + goto cleanup; > > > } > > > > > > if (pci_device_probe(pci_dev)) { > > > igt_warn("Couldn't probe PCI device\n"); > > > - return NULL; > > > + goto cleanup; > > > } > > > > > > return pci_dev; > > > + > > > +cleanup: > > > + pci_system_cleanup(); > > > > This is a global cleanup of libpciaccess iirc, such that if anyone else > > was using the library they would be affected. > > Right, but shouldn't we also drop pci_system_init() from here and request > users to manage initialization and cleanup of that data themselves? On each > call pci_system_init() abandons existing data and overwrites a pointer to it > with that of newly allocated memory, then tests calling > igt_device_get_pci_device() multiple times are going to suffer from > significant memory leaking. Right, I thought it only inited once -- I just remember the issue with calling pci_system_cleanup() while others were still using it. Stick the call to init in an __attribute__((constructor)) or pthread_once. -Chris