From eb68c3d5a23e519a4b9ffc7b87fa7db68a18ae0b Mon Sep 17 00:00:00 2001 From: Po Lu Date: Tue, 1 Nov 2022 19:11:19 +0800 Subject: [PATCH] Fix leak on Lucid build * src/xterm.c (x_term_init): Rectify wrong fix for bug#18403. --- src/xterm.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/xterm.c b/src/xterm.c index 7dd969b821f..d8358269f60 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -29778,21 +29778,30 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name) { XrmValue d, fr, to; Font font; + XFontStruct *query_result; dpy = dpyinfo->display; - d.addr = (XPointer)&dpy; + d.addr = (XPointer) &dpy; d.size = sizeof (Display *); fr.addr = (char *) XtDefaultFont; fr.size = sizeof (XtDefaultFont); to.size = sizeof (Font *); - to.addr = (XPointer)&font; + to.addr = (XPointer) &font; x_catch_errors (dpy); if (!XtCallConverter (dpy, XtCvtStringToFont, &d, 1, &fr, &to, NULL)) emacs_abort (); - if (x_had_errors_p (dpy) || !XQueryFont (dpy, font)) + query_result = XQueryFont (dpy, font); + + /* Set the dialog font to some fallback (here, 9x15) if the font + specified is invalid. */ + if (x_had_errors_p (dpy) || !font) XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15"); - /* Do not free XFontStruct returned by the above call to XQueryFont. - This leads to X protocol errors at XtCloseDisplay (Bug#18403). */ + + /* Do not destroy the font struct returned above with XFreeFont; + that also destroys the font, leading to to X protocol errors at + XtCloseDisplay. Just free the font info structure. + (Bug#18403) */ + XFreeFontInfo (NULL, query_result, 0); x_uncatch_errors (); } #endif -- 2.39.2