From: Alexander Larsson <[email protected]> This is a bunch of changes I think we we need before the 0.6.0 release.
They do: * Make SurfaceInfo global to fix potential memory corruption (#29053) * Make malloc_sem global since it protects a the global mspace data * always free all queued resources before allocating to keep down fragmentation * Speed up surface id allocation I additionally have some outstanding questions for the driver: There are a lot of data that are not protected by any locks that change during runtime. Both in the pdev (things like e.g. FPUSave, update_surface_id and update_area) and in the DevRes (like the caches and surfaces_used). With GDI apparently allowing multiple concurrent calls to different surfaces this looks pretty unsafe. With surfaces_info global we avoid the problem with late resource freeing accessing the wrong surface_info[id]. However, isn't there also a possible problem where the pdev is not only inactive, but also disabled. DrvDisablePDEV frees the pdev, which any outstanding surface_info points to, so the late free would access a freed pointer. Is there some way to have the surface resources ref the pdev to make it not be disabled? Or is something else guaranteeing this already? Alexander Larsson (8): Move SurfaceInfo structure Add helper functions for surface info <-> id mapping Move SurfaceInfo to global data Always release free resources when allocating Make malloc_sem global Move surface in use check to helper function Store surfaces_used in a bit-array Add simple cache to speed up surface allocation display/driver.c | 40 ++++---------------- display/qxldd.h | 36 +++++++++--------- display/res.c | 103 +++++++++++++++++++++++++++++++---------------------- display/surface.c | 10 +++--- display/surface.h | 92 +++++++++++++++++++++++++++++++++++++++-------- 5 files changed, 168 insertions(+), 113 deletions(-) -- 1.7.2.1 _______________________________________________ Spice-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/spice-devel
