On Wed, 2007-02-28 at 10:58 -0800, Brian Paul wrote: > > diff-tree f30e31276304696558abffdd9a6e3df21d41c0f5 (from > e21096b07c5854d01114b58f87d08709e370f8b7) > Author: Brian <[EMAIL PROTECTED]> > Date: Tue Feb 27 11:09:28 2007 -0700 > > assert that fb->RefCount==0 in _mesa_free_framebuffer_data() > > diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c > index d061d22..3fe70f4 100644 > --- a/src/mesa/main/framebuffer.c > +++ b/src/mesa/main/framebuffer.c > @@ -216,6 +216,7 @@ _mesa_free_framebuffer_data(struct gl_fr > GLuint i; > > assert(fb); > + assert(fb->RefCount == 0); > > _glthread_DESTROY_MUTEX(fb->Mutex);
This triggers for me with AIGLX (resulting in instant X server death) when a client goes away without explicitly destroying its DRI drawables. Here's a backtrace: #0 0x0fc6cf6c in raise () from /lib/tls/libc.so.6 #1 0x0fc6ea0c in abort () from /lib/tls/libc.so.6 #2 0x0fc652d8 in __assert_fail () from /lib/tls/libc.so.6 #3 0x0f527c2c in _mesa_free_framebuffer_data (fb=0x10ac8e98) at main/framebuffer.c:219 #4 0x0f527c48 in _mesa_destroy_framebuffer (fb=0x10ac8e98) at main/framebuffer.c:203 #5 0x0f4d91a0 in radeonDestroyBuffer (driDrawPriv=<value optimized out>) at radeon_screen.c:911 #6 0x0f4d5828 in driDestroyDrawable (dpy=0x0, drawablePrivate=0x1072ae18) at ../common/dri_util.c:710 #7 0x0f4d5194 in __driGarbageCollectDrawables (drawHash=0x102054f0) at ../common/dri_util.c:138 #8 0x0f4d53b0 in driDestroyContext (dpy=0x0, scrn=0, contextPrivate=0x106c6158) at ../common/dri_util.c:752 #9 0x0f96d334 in __glXDRIcontextDestroy (baseContext=0x0) at glxdri.c:281 #10 0x0f92bb38 in __glXFreeContext (cx=0x0) at glxext.c:244 #11 0x0f92c0c0 in ClientGone (clientIndex=258957664, id=<value optimized out>) at glxext.c:146 #12 0x10028724 in FreeClientResources (client=0x106c6190) at resource.c:837 #13 0x1003c184 in CloseDownClient (client=0x106c6190) at dispatch.c:3626 #14 0x100431f8 in Dispatch () at dispatch.c:483 #15 0x100265d0 in main (argc=11, argv=0x7fb6ece4, envp=<value optimized out>) at main.c:469 radeonDestroyBuffer is called when the reference count is 1. Changing radeonDestroyBuffer to call _mesa_dereference_framebuffer instead of _mesa_destroy_framebuffer seems to work so far, but I'm not sure that's the correct fix. Any ideas? -- Earthling Michel Dänzer | http://tungstengraphics.com Libre software enthusiast | Debian, X and DRI developer ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Mesa3d-dev mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mesa3d-dev
