On Mon, Nov 07, 2022 at 02:32:44PM +0100, Theo Buehler wrote: > On Mon, Nov 07, 2022 at 12:41:14PM +0000, Matthieu Herrb wrote: > > [...] > > > Fix a small leak in pci_system_openbsd_destroy() while there. > > Similar leaks exist in pci_system_openbsd_create() which I think should > call pci_system_openbsd_destroy() in both early returns instead of > duplicating it in the second one. > > pci_system_init() returning non-zero will hit an err(), so these leaks > don't really matter. > > compile-tested only since I don't know how to exercise this code. >
Hmm you made me look closer at the common code. for pci_system_cleanup() which calls the OS specific destroy function free(pci_sys) is done in the common code. So adding those in the OS specific functions is dumb. (and I don't know why the libpciaccess 0.17 patch add them to freebsd...) OTOH there no such code in pci_system_init() so your patch makes sense, even though in most cases the caller will exit on failure anyways. > Index: src/openbsd_pci.c > =================================================================== > RCS file: /cvs/xenocara/lib/libpciaccess/src/openbsd_pci.c,v > retrieving revision 1.28 > diff -u -p -r1.28 openbsd_pci.c > --- src/openbsd_pci.c 3 Sep 2021 07:19:13 -0000 1.28 > +++ src/openbsd_pci.c 7 Nov 2022 13:25:09 -0000 > @@ -338,6 +338,8 @@ pci_system_openbsd_destroy(void) > for (domain = 0; domain < ndomains; domain++) > close(pcifd[domain]); > ndomains = 0; > + free(pci_sys); > + pci_sys = NULL; > } > > static int > @@ -651,8 +653,10 @@ pci_system_openbsd_create(void) > ndomains++; > } > > - if (ndomains == 0) > + if (ndomains == 0) { > + pci_system_openbsd_destroy(); > return ENXIO; > + } > > ndevs = 0; > for (domain = 0; domain < ndomains; domain++) { > @@ -676,11 +680,7 @@ pci_system_openbsd_create(void) > pci_sys->num_devices = ndevs; > pci_sys->devices = calloc(ndevs, sizeof(struct pci_device_private)); > if (pci_sys->devices == NULL) { > - free(pci_sys); > - pci_sys = NULL; > - for (domain = 0; domain < ndomains; domain++) > - close(pcifd[domain]); > - ndomains = 0; > + pci_system_openbsd_destroy(); > return ENOMEM; > } > > -- Matthieu Herrb