EVALUATION
This problem is an example of 'use-after-free' crash: the crash itself happens
when AccelGlyphCache meets invalid pointer to a cache cell info in cached
glyph info structure. This pointer can have arbitrary value, because corresponding
glyph info structure is already destroyed by CStrike cache machinery.
The root of the problem is that this destruction is made without any notification
to AccelGlyphCache, which keeps and uses invalid pointer to glyph info object.
This crash can happen in any application which produces glyphs intensively.
For example, Java2D transform demo crashes with the same symptoms.
|
EVALUATION
Stack: [0x0000000115917000,0x0000000115b17000], sp=0x0000000115b167d0, free space=2045k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [liblwawt.dylib+0xc861] AccelGlyphCache_RemoveCellInfo+0x12
C [liblwawt.dylib+0xcb3c] AccelGlyphCache_AddGlyph+0x1b9
C [liblwawt.dylib+0xabb1] OGLTR_AddToGlyphCache+0x4f
C [liblwawt.dylib+0xb4ee] OGLTR_DrawGlyphList+0x2b3
C [liblwawt.dylib+0x7da6] Java_sun_java2d_opengl_OGLRenderQueue_flushBuffer+0x2a2
J sun.java2d.opengl.OGLRenderQueue.flushBuffer(JI)V
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J sun.java2d.opengl.OGLRenderQueue.flushBuffer(JI)V
J sun.java2d.opengl.OGLRenderQueue$QueueFlusher.run()V
v ~StubRoutines::call_stu
|