From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.bugs Subject: bug#23386: Segfault when messing with font-backend Date: Tue, 12 Jul 2016 18:20:41 +0300 Message-ID: <86d31541-774c-3605-41b7-2aae0efd7abb@yandex.ru> References: <83y47zxi81.fsf@gnu.org> <87d1mmiq35.fsf@users.sourceforge.net> <73cd86e5-3c92-cb6a-3a7b-1a5ec82c05de@yandex.ru> <87a8hpgseb.fsf@users.sourceforge.net> <831t30dz2e.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------04B2C924ED3B0AF93656C8F7" X-Trace: ger.gmane.org 1468336885 19184 80.91.229.3 (12 Jul 2016 15:21:25 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 12 Jul 2016 15:21:25 +0000 (UTC) Cc: 23386@debbugs.gnu.org To: Eli Zaretskii , npostavs@users.sourceforge.net Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Jul 12 17:21:15 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1bMzUo-0002zt-6Q for geb-bug-gnu-emacs@m.gmane.org; Tue, 12 Jul 2016 17:21:14 +0200 Original-Received: from localhost ([::1]:41246 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bMzUn-0006Fz-EZ for geb-bug-gnu-emacs@m.gmane.org; Tue, 12 Jul 2016 11:21:13 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55973) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bMzUe-0006Fj-37 for bug-gnu-emacs@gnu.org; Tue, 12 Jul 2016 11:21:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bMzUd-0003mQ-3F for bug-gnu-emacs@gnu.org; Tue, 12 Jul 2016 11:21:04 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:36160) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bMzUb-0003mA-Vi for bug-gnu-emacs@gnu.org; Tue, 12 Jul 2016 11:21:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1bMzUb-0006IC-Mk for bug-gnu-emacs@gnu.org; Tue, 12 Jul 2016 11:21:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Antipov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 12 Jul 2016 15:21:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 23386 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed Original-Received: via spool by 23386-submit@debbugs.gnu.org id=B23386.146833685224163 (code B ref 23386); Tue, 12 Jul 2016 15:21:01 +0000 Original-Received: (at 23386) by debbugs.gnu.org; 12 Jul 2016 15:20:52 +0000 Original-Received: from localhost ([127.0.0.1]:48497 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMzUS-0006Hf-20 for submit@debbugs.gnu.org; Tue, 12 Jul 2016 11:20:52 -0400 Original-Received: from forward1j.cmail.yandex.net ([5.255.227.19]:41071) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMzUP-0006HR-Ka for 23386@debbugs.gnu.org; Tue, 12 Jul 2016 11:20:50 -0400 Original-Received: from smtp2o.mail.yandex.net (smtp2o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::26]) by forward1j.cmail.yandex.net (Yandex) with ESMTP id 460FE20EA3; Tue, 12 Jul 2016 18:20:43 +0300 (MSK) Original-Received: from smtp2o.mail.yandex.net (localhost [127.0.0.1]) by smtp2o.mail.yandex.net (Yandex) with ESMTP id 3EA2A36A44F0; Tue, 12 Jul 2016 18:20:43 +0300 (MSK) Original-Received: by smtp2o.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id k9ZkPL5WhQ-KgSmPZHo; Tue, 12 Jul 2016 18:20:42 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client certificate not present) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1468336842; bh=f+QT82fjmMHBPstyYyzvPgupozahmrUFoMRuOGuQ2s0=; h=Subject:To:References:Cc:From:Message-ID:Date:In-Reply-To; b=qabujhB9fQUDSJwiOYl5eUnyeZ7VZEiuzsadl7v/DI7PfgyttX8dm68kgVE26Mfhe eaEgOf7AtdgvM2eFJ2NoC0TXF8M4w5h5LGgSQK5k6wSC17Oq7NB0knvLmYsW1OClvt NOzcXKbWEdL+vgbNHEzxpKsOyC3Zp6J0MCNgEPds= Authentication-Results: smtp2o.mail.yandex.net; dkim=pass header.i=@yandex.ru X-Yandex-Suid-Status: 1 0,1 0,1 0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 In-Reply-To: <831t30dz2e.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:120919 Archived-At: This is a multi-part message in MIME format. --------------04B2C924ED3B0AF93656C8F7 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 07/11/2016 05:33 PM, Eli Zaretskii wrote: > But it doesn't do what the user asked for. > > I don't see why it would be meaningless to evict a backend and start > using another one, if all it takes is re-open a bunch of fonts. OK, the following patch basically works for me (not tested too much, BTW). Dmitry --------------04B2C924ED3B0AF93656C8F7 Content-Type: text/x-diff; name="bug23386.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="bug23386.patch" diff --git a/src/dispextern.h b/src/dispextern.h index c2fcca5..88b4077 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -3605,6 +3605,7 @@ extern Lisp_Object x_default_parameter (struct frame *, Lisp_Object, Lisp_Object, Lisp_Object, const char *, const char *, enum resource_types); +extern void x_default_font_parameter (struct frame *, Lisp_Object); extern char *x_get_string_resource (XrmDatabase, const char *, const char *); diff --git a/src/frame.c b/src/frame.c index 80e181f..40d2d32 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3712,7 +3712,11 @@ x_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu return; if (FRAME_FONT (f)) - free_all_realized_faces (Qnil); + { + Lisp_Object frame; + XSETFRAME (frame, f); + free_all_realized_faces (frame); + } new_value = font_update_drivers (f, NILP (new_value) ? Qt : new_value); if (NILP (new_value)) @@ -3726,10 +3730,8 @@ x_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu if (FRAME_FONT (f)) { - Lisp_Object frame; - - XSETFRAME (frame, f); - x_set_font (f, Fframe_parameter (frame, Qfont), Qnil); + /* Reconsider default font after backend(s) change (Bug#23386). */ + x_default_font_parameter (f, Qnil); face_change = true; windows_or_buffers_changed = 18; } diff --git a/src/w32fns.c b/src/w32fns.c index 0eb720e..cffa8c0 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -5249,7 +5249,7 @@ do_unwind_create_frame (Lisp_Object frame) unwind_create_frame (frame); } -static void +void x_default_font_parameter (struct frame *f, Lisp_Object parms) { struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); diff --git a/src/xfns.c b/src/xfns.c index 16dbcfd..fcd3886 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -3065,7 +3065,7 @@ do_unwind_create_frame (Lisp_Object frame) unwind_create_frame (frame); } -static void +void x_default_font_parameter (struct frame *f, Lisp_Object parms) { struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); --------------04B2C924ED3B0AF93656C8F7--