NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: xsrc/58133: X server crashes; radeon 5450; modesetting



So far I have tried to avoid reproducing it, but I can try :)
I will add some logging, and since the callers^2 seem to have a fallback
path, I will propagate the error condition a bit better so that that
path should be taken. Something like this:

--- glamor_text.c.orig	2024-04-10 19:22:22.286045752 +0200
+++ glamor_text.c	2024-04-10 19:21:41.815261092 +0200
@@ -120,6 +120,12 @@
     /* Set up the vertex buffers for the font and destination */
 
     v = glamor_get_vbo_space(drawable->pScreen, count * (6 * sizeof (GLshort)), &vbo_offset);
+    if (v == NULL) {
+	LogMessage(X_ERROR,
+		   "glamor_text: glamor_get_vbo_space failed (%d)\n",
+		   count * (6 * sizeof (GLshort)));
+	return -1;
+    }
 
     glEnableVertexAttribArray(GLAMOR_VERTEX_POS);
     glVertexAttribDivisor(GLAMOR_VERTEX_POS, 1);
@@ -293,10 +299,13 @@
     if (!prog)
         goto bail;
 
-    x = glamor_text(drawable, gc, glamor_font, prog,
+    int new_x = glamor_text(drawable, gc, glamor_font, prog,
                     x, y, count, chars, charinfo, sixteen);
 
-    *final_pos = x;
+    if (new_x != -1) {
+	*final_pos = new_x;
+	return TRUE;
+    }
 
 bail:
     return FALSE;
@@ -463,10 +472,12 @@
     if (!glamor_use_program(pixmap, gc, prog, NULL))
         goto bail;
 
-    (void) glamor_text(drawable, gc, glamor_font, prog,
+    int new_x =  glamor_text(drawable, gc, glamor_font, prog,
                        x, y, count, chars, charinfo, sixteen);
 
-    return TRUE;
+    if (new_x != -1) {
+	return TRUE;
+    }
 
 bail:
     return FALSE;

I noticed that none of the other callers of glamor_get_vbo_space() check
for NULL, though.

I do have the core dump available and bzip2-compressed it is only 7.1M
(64M uncompressed). If you want it I can send it off-gnats. Maybe you
can examine that radeon_buffer_object that way (I haven't searched hard
enough to find it yet).

-Olaf.


Home | Main Index | Thread Index | Old Index