Yep. Please get this committed before we tag it for the katamari. Reviewed-by: Jeremy Huddleston <jerem...@apple.com>
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 > > _______________________________________________ > xorg-devel@lists.x.org: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel