From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#21428: 24.5; Crash of emacs on OS X, installed via homebrew cask Date: Thu, 22 Oct 2015 20:05:31 +0300 Message-ID: <831tcmu944.fsf@gnu.org> References: <83k2r8b4rr.fsf@gnu.org> <834mibbstw.fsf@gnu.org> <83k2r79bi5.fsf@gnu.org> <834mi4x7tp.fsf@gnu.org> <83fv1mellz.fsf@gnu.org> <1130CA27-B8B0-4009-BC14-A3FC76B92216@gmail.com> <838u7265sv.fsf@gnu.org> <83pp0d4rot.fsf@gnu.org> <83611yucx0.fsf@gnu.org> Reply-To: Eli Zaretskii NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1445533652 13553 80.91.229.3 (22 Oct 2015 17:07:32 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 22 Oct 2015 17:07:32 +0000 (UTC) Cc: 21428@debbugs.gnu.org To: Rainer M Krug , martin rudalics Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Oct 22 19:07:18 2015 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 1ZpJKd-0008PK-VH for geb-bug-gnu-emacs@m.gmane.org; Thu, 22 Oct 2015 19:07:16 +0200 Original-Received: from localhost ([::1]:33296 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZpJKc-0006zW-VD for geb-bug-gnu-emacs@m.gmane.org; Thu, 22 Oct 2015 13:07:14 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53682) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZpJKW-0006zK-Ty for bug-gnu-emacs@gnu.org; Thu, 22 Oct 2015 13:07:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZpJKQ-0001fr-Hu for bug-gnu-emacs@gnu.org; Thu, 22 Oct 2015 13:07:08 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:42425) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZpJKQ-0001fn-Ej for bug-gnu-emacs@gnu.org; Thu, 22 Oct 2015 13:07:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1ZpJKQ-0003me-3T for bug-gnu-emacs@gnu.org; Thu, 22 Oct 2015 13:07:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 22 Oct 2015 17:07:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21428 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo Original-Received: via spool by 21428-submit@debbugs.gnu.org id=B21428.144553358814504 (code B ref 21428); Thu, 22 Oct 2015 17:07:02 +0000 Original-Received: (at 21428) by debbugs.gnu.org; 22 Oct 2015 17:06:28 +0000 Original-Received: from localhost ([127.0.0.1]:33133 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZpJJr-0003lr-Nm for submit@debbugs.gnu.org; Thu, 22 Oct 2015 13:06:28 -0400 Original-Received: from mtaout26.012.net.il ([80.179.55.182]:44050) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZpJJo-0003li-S8 for 21428@debbugs.gnu.org; Thu, 22 Oct 2015 13:06:26 -0400 Original-Received: from conversion-daemon.mtaout26.012.net.il by mtaout26.012.net.il (HyperSendmail v2007.08) id <0NWM00D00SVJF200@mtaout26.012.net.il> for 21428@debbugs.gnu.org; Thu, 22 Oct 2015 20:08:48 +0300 (IDT) Original-Received: from HOME-C4E4A596F7 ([84.94.185.246]) by mtaout26.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NWM0082USYNTY50@mtaout26.012.net.il>; Thu, 22 Oct 2015 20:08:48 +0300 (IDT) In-reply-to: X-012-Sender: halo1@inter.net.il X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x 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-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:107860 Archived-At: > From: Rainer M Krug > Cc: 21428@debbugs.gnu.org > Date: Thu, 22 Oct 2015 18:22:43 +0200 > > > That seems like an entirely different crash. > > That is good to know - I was using emacs for quite some time and no crash. Great! I'd like you to run it for a few more days. You could run it regularly, not under GDB, because I think the bug for which the GDB setup was created will not happen anymore. > Would it be possible to backport the changes which caused this error to > the 24 branch? Try the patch below (it should apply with some differences in line numbers). I cannot make any promises (the display code changed quite a bit since then), but on first sight it looks like this should work with Emacs 24. > > Can you see what caused > > it (is emacsframe a NULL pointer or something?), and also show a > > backtrace? > > Is this the info you are looking for: I am using emacs almost > exclusively in full-screen view. Yes, but I'm afraid I cannot interpret it. Martin, any insights? Thanks. diff --git a/src/frame.c b/src/frame.c index 98a7a57..6d596a4 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3651,6 +3651,10 @@ x_set_font (struct frame *f, Lisp_Object arg, Lisp_Object oldval) /* Attempt to hunt down bug#16028. */ SET_FRAME_GARBAGED (f); + /* This is important if we are called by some Lisp as part of + redisplaying the frame, see redisplay_internal. */ + f->fonts_changed = true; + recompute_basic_faces (f); do_pending_window_change (0); diff --git a/src/xdisp.c b/src/xdisp.c index a793157..986e13f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -13810,6 +13810,7 @@ redisplay_internal (void) bool gcscrollbars /* Only GC scrollbars when we redisplay the whole frame. */ = f->redisplay || !REDISPLAY_SOME_P (); + bool f_redisplay_flag = f->redisplay; /* Mark all the scroll bars to be removed; we'll redeem the ones we want when we redisplay their windows. */ if (gcscrollbars && FRAME_TERMINAL (f)->condemn_scroll_bars_hook) @@ -13853,6 +13854,20 @@ redisplay_internal (void) goto retry_frame; } + /* If the frame's redisplay flag was not set before + we went about redisplaying its windows, but it is + set now, that means we employed some redisplay + optimizations inside redisplay_windows, and + bypassed producing some screen lines. But if + f->redisplay is now set, it might mean the old + faces are no longer valid (e.g., if redisplaying + some window called some Lisp which defined a new + face or redefined an existing face), so trying to + use them in update_frame will segfault. + Therefore, we must redisplay this frame. */ + if (!f_redisplay_flag && f->redisplay) + goto retry_frame; + /* Prevent various kinds of signals during display update. stdio is not robust about handling signals, which can cause an apparent I/O error. */ @@ -13906,8 +13921,10 @@ redisplay_internal (void) /* Compare desired and current matrices, perform output. */ update: - /* If fonts changed, display again. */ - if (sf->fonts_changed) + /* If fonts changed, display again. Likewise if redisplay_window_1 + above caused some change (e.g., a change in faces) that requires + considering the entire frame again. */ + if (sf->fonts_changed || sf->redisplay) goto retry; /* Prevent freeing of realized faces, since desired matrices are