XQuartz: Fix a memory leak with surfaces that a new test found.
authorGeorge Staplin <gstaplin@apple.com>
Wed, 4 Mar 2009 08:39:58 +0000 (01:39 -0700)
committerJeremy Huddleston <jeremyhu@apple.com>
Wed, 20 Jul 2011 02:49:47 +0000 (19:49 -0700)
commit4fe7df265324f63025686efe9d32342e3cef40d3
tree34a4191e7b0ce826f8c650609ba3c0dff665b42f
parent0ebe45a717faa6464d3b1ab73e30570518ee4798
XQuartz: Fix a memory leak with surfaces that a new test found.

xp_destroy_surface was called with a surface id of 0, due to some
premature cleanup that set it to 0.  This means the surfaces
weren't being destroyed until the window was.

The code that did that was: pDRIDrawablePriv->sid = 0;

In long running applications this leak may or may not have been
harmful.  With the old libGL the surfaces weren't destroyed until
the context was destroyed or a new context created.  In the new
libGL they are reference counted, and released much sooner, so we
ran into a resource leak more noticeably with some tests.

Make the Apple DRI code dispatch events to the client(s) for
destroyed surfaces, when a resource is destroyed.  This seems to
work in my tests, however this clearly wasn't working for a while,
so bugs may result in the future if it enables some new (unexpected)
side effects.

Also add a few helpful comments to aid in understanding the code
in the future.

Tested with the test suite, Pymol, and various Mesa demos.
(cherry picked from commit bede83eb19a1629396fcd5a46441f8476a8fcd1b)
hw/xquartz/xpr/dri.c