From: Kaido K. <ka...@tr...> - 2008-08-26 19:39:23
|
Hi! to quick-fix the assert I used the following approach: first, in via_context.c in viaDestroyContent() mark the buffer as NULL just before the vmesa is freed. __DRIdrawablePrivate *const drawable = vmesa->driDrawable; if (drawable) { drawable->driverPrivate = NULL; } second, in via_screen.c in viaDestroyBuffer() check if driDrawPriv->driverPrivate is not NULL before acessing it. works for me. regards, kaido |
From: Kyle H. <aer...@gm...> - 2008-08-26 19:55:10
|
This might end up causing a memory leak if driverPrivate isn't freed ahead of time. If it is, then the place where it's freed should actually do the re-setting of it to NULL. -Kyle H On Tue, Aug 26, 2008 at 12:39 PM, Kaido Kärner <ka...@tr...> wrote: > Hi! > > to quick-fix the assert I used the following approach: > > first, in via_context.c in viaDestroyContent() mark the buffer as NULL just > before the vmesa is freed. > > __DRIdrawablePrivate *const drawable = vmesa->driDrawable; > if (drawable) { > drawable->driverPrivate = NULL; > } > > second, in via_screen.c in viaDestroyBuffer() check if > driDrawPriv->driverPrivate is not NULL before acessing it. > > works for me. > > > regards, > kaido > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great > prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Mesa3d-users mailing list > Mes...@li... > https://lists.sourceforge.net/lists/listinfo/mesa3d-users > > |
From: Brian P. <bri...@tu...> - 2008-08-26 20:24:20
|
Could someone skilled with gdb do the following? We might get to the bottom of this. 1. Put a breakpoint on viaDeleteRenderbuffer() and make note of the value of rb each time it's called, and get a stack trace each time. 2. When the assertion in renderbuffer.c fails, print 'oldRb' and provide a stack trace. -Brian Kyle Hamilton wrote: > This might end up causing a memory leak if driverPrivate isn't freed > ahead of time. If it is, then the place where it's freed should > actually do the re-setting of it to NULL. > > -Kyle H > > On Tue, Aug 26, 2008 at 12:39 PM, Kaido Kärner <ka...@tr...> wrote: >> Hi! >> >> to quick-fix the assert I used the following approach: >> >> first, in via_context.c in viaDestroyContent() mark the buffer as NULL just >> before the vmesa is freed. >> >> __DRIdrawablePrivate *const drawable = vmesa->driDrawable; >> if (drawable) { >> drawable->driverPrivate = NULL; >> } >> >> second, in via_screen.c in viaDestroyBuffer() check if >> driDrawPriv->driverPrivate is not NULL before acessing it. >> >> works for me. >> >> >> regards, >> kaido >> >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge >> Build the coolest Linux based applications with Moblin SDK & win great >> prizes >> Grand prize is a trip for two to an Open Source event anywhere in the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Mesa3d-users mailing list >> Mes...@li... >> https://lists.sourceforge.net/lists/listinfo/mesa3d-users >> >> > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Mesa3d-users mailing list > Mes...@li... > https://lists.sourceforge.net/lists/listinfo/mesa3d-users |
From: Kaido K. <ka...@tr...> - 2008-08-26 20:39:34
|
> Could someone skilled with gdb do the following? We might get to the > bottom of this. > > 1. Put a breakpoint on viaDeleteRenderbuffer() and make note of the > value of rb each time it's called, and get a stack trace each time. > > 2. When the assertion in renderbuffer.c fails, print 'oldRb' and > provide a stack trace. The problem is, that the buffers are allocated in the context structure, not the drawable. And if the context is freed before the drawable - which has pointers to buffers - the crash is inevitable, as viaDestroyContext frees the memory which holds the buffers. I can do any additional debugging, if needed, tomorrow. kaido |
From: Brian P. <bri...@tu...> - 2008-08-26 20:53:28
|
Kaido Kärner wrote: >> Could someone skilled with gdb do the following? We might get to the >> bottom of this. >> >> 1. Put a breakpoint on viaDeleteRenderbuffer() and make note of the >> value of rb each time it's called, and get a stack trace each time. >> >> 2. When the assertion in renderbuffer.c fails, print 'oldRb' and >> provide a stack trace. > > The problem is, that the buffers are allocated in the context structure, not the drawable. Yes, that's the root problem but would take more effort to fix. I'm just looking for a work-around for now (without hacking core Mesa). > And if the context is freed before the drawable - which has pointers to buffers - the > crash is inevitable, as viaDestroyContext frees the memory which holds the buffers. We may be able to "fix" that with a tweak to the refcounting. > I can do any additional debugging, if needed, tomorrow. Please do. -Brian |