On Thu, Apr 05, 2012 at 02:16:53PM -0700, Jeremy Huddleston wrote: > Yep. Please get this committed before we tag it for the katamari. > > Reviewed-by: Jeremy Huddleston <[email protected]> Hi,
Already pushed http://cgit.freedesktop.org/xorg/lib/libpciaccess/commit/?id=6f9d9f1e1b093939bc459be606fba72f1d6dfc76 > > On Apr 1, 2012, at 23:26, Matthieu Herrb wrote: > > > The previous version of new_io_handle() would invalidate all previous > > allocations when realloc moves the base pointer of the ios array. > > Since I cannot figure out where this array is useful, just get rid of > > it, providing sound stable memory allocation. > > > > Fixes vgaHWSaveFonts() in 1.12 xserver on OpenBSD, but other > > sub-systems relaying on pci_io could be affected too. > > --- > > src/common_io.c | 39 ++++----------------------------------- > > 1 files changed, 4 insertions(+), 35 deletions(-) > > > > diff --git a/src/common_io.c b/src/common_io.c > > index 5b35e07..f5c9e45 100644 > > --- a/src/common_io.c > > +++ b/src/common_io.c > > @@ -28,59 +28,28 @@ > > #include "pciaccess.h" > > #include "pciaccess_private.h" > > > > -static struct pci_io_handle *ios; > > -static unsigned int num_ios; > > - > > static struct pci_io_handle * > > new_io_handle(void) > > { > > struct pci_io_handle *new; > > > > - new = realloc(ios, sizeof(struct pci_io_handle) * (num_ios + 1)); > > + new = malloc(sizeof(struct pci_io_handle)); > > if (!new) > > return NULL; > > > > - ios = new; > > - num_ios++; > > - > > - return ios + num_ios - 1; > > + return new; > > } > > > > static void > > delete_io_handle(struct pci_io_handle *handle) > > { > > - struct pci_io_handle *new; > > - int i = 0; > > - > > - if (!handle || !num_ios || (void *)handle < (void *)ios || > > - (void *)handle > (void *)(ios + num_ios - 1)) > > - return; > > - > > - for (i = 0; i < num_ios; i++) { > > - if (ios + i == handle) { > > - memmove(&ios[i], &ios[i+1], sizeof(struct pci_io_handle) * > > - (num_ios - i - 1)); > > - break; > > - } > > - } > > - > > - num_ios--; > > - if (num_ios) { > > - new = realloc(ios, sizeof(struct pci_io_handle) * num_ios); > > - if (new) > > - ios = new; > > - } else { > > - free(ios); > > - ios = NULL; > > - } > > + free(handle); > > + return; > > } > > > > _pci_hidden void > > pci_io_cleanup(void) > > { > > - free(ios); > > - ios = NULL; > > - num_ios = 0; > > } > > > > /** > > -- > > 1.7.6 > > > > _______________________________________________ > > [email protected]: X.Org development > > Archives: http://lists.x.org/archives/xorg-devel > > Info: http://lists.x.org/mailman/listinfo/xorg-devel > > > -- Matthieu Herrb _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
