From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Noam Postavsky Newsgroups: gmane.emacs.bugs Subject: bug#31312: Segmentation fault with doom-emacs, NeoTree and Zoom Date: Wed, 02 May 2018 08:21:15 -0400 Message-ID: <87fu3ant8k.fsf@gmail.com> References: <87r2mvo6c8.fsf@gmail.com> <5AE87AA3.6050602@gmx.at> <87o9hznfam.fsf@gmail.com> <5AE957BA.6000809@gmx.at> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: blaine.gmane.org 1525263610 28107 195.159.176.226 (2 May 2018 12:20:10 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 2 May 2018 12:20:10 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) Cc: 31312@debbugs.gnu.org, Andrea Cardaci To: martin rudalics Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed May 02 14:20:06 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fDqjt-0007C2-IT for geb-bug-gnu-emacs@m.gmane.org; Wed, 02 May 2018 14:20:05 +0200 Original-Received: from localhost ([::1]:50190 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fDqm0-0008JV-Dp for geb-bug-gnu-emacs@m.gmane.org; Wed, 02 May 2018 08:22:16 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:56588) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fDqls-0008JM-HO for bug-gnu-emacs@gnu.org; Wed, 02 May 2018 08:22:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fDqlm-0008VO-A6 for bug-gnu-emacs@gnu.org; Wed, 02 May 2018 08:22:08 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:38556) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fDqlm-0008VD-1j for bug-gnu-emacs@gnu.org; Wed, 02 May 2018 08:22:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fDqll-0007Ve-Nz for bug-gnu-emacs@gnu.org; Wed, 02 May 2018 08:22:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Noam Postavsky Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 02 May 2018 12:22:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 31312 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed Original-Received: via spool by 31312-submit@debbugs.gnu.org id=B31312.152526368628825 (code B ref 31312); Wed, 02 May 2018 12:22:01 +0000 Original-Received: (at 31312) by debbugs.gnu.org; 2 May 2018 12:21:26 +0000 Original-Received: from localhost ([127.0.0.1]:46453 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fDqlB-0007Uq-QT for submit@debbugs.gnu.org; Wed, 02 May 2018 08:21:26 -0400 Original-Received: from mail-it0-f53.google.com ([209.85.214.53]:36499) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fDql9-0007Uc-66 for 31312@debbugs.gnu.org; Wed, 02 May 2018 08:21:23 -0400 Original-Received: by mail-it0-f53.google.com with SMTP id e20-v6so16740779itc.1 for <31312@debbugs.gnu.org>; Wed, 02 May 2018 05:21:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=Qq5fDre7Jilu4rhUaH8fXvAMZ4XSUDGdC6CEYzaFPc8=; b=PiSXVpkFIHfNa6ApVzmMiJosYqYDKzOpW/nilk6lrrP6x926wHA3uNYoK4o9ylmLLu Q+hTUFgyjOEvvkP8tZT1bqbb1nPdXfBqNEClI8/6OvT8meE/3TiRpo5RYch0JZ1o55cZ 8bQvvuzdwFmYaiCx6xI8TS4Je9DXJdWeYXbfv8BU294TpLCkoedbEI4VKULA0fKQHXwe OJ14j96hVw8iPyh3m/czrcYtJOtp5iqnOD+XiGs7DAWga+GJdcpGW2qyvs9Gz4PZeTXe 4Rn7mMUeXlvkukQfIh6D9Z29JQdP/7D3PDELEBkD7GLttv8ayp7NiTQx+fsUMHTbXv8L i3AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=Qq5fDre7Jilu4rhUaH8fXvAMZ4XSUDGdC6CEYzaFPc8=; b=rECETsk+y6iMt/oQNbmvI8cCwTBrj6ftTqzb/0IS/kF6LDxMkPsP3yM/uZ8m6akxxX v7UCsPidxYBoH5fr17IadwldrWtpFWyU7O3MVpDfZXT0+bFlE/FnoFkc+sgxNatprvUH 8V99C18En9zA9gqB/4ZFRHecRwPsJxLiSKjTX8MSMUMllh6kqs3Xsuamd5ToQTkBTzdW j0T+MEMQCRg8KFDuDJvYMYbVIitbbqeLtglFT0R4hM0ThwAsvudn84GQ3cd4gT1nd5r9 M9vLXkHn7wXDu1aIOCBGAnKX2qObT+MvpnUY2GSMM8JsViuWq1e1VBQKoUs1mYh4Jm12 r0DQ== X-Gm-Message-State: ALQs6tACm/5rW5EaKwZOV844LNDsA5Cyf8MnxRYnCU2pAReRlQQ+YiN5 j7CdXtJPGsb6ej1kEtQY0uo= X-Google-Smtp-Source: AB8JxZpXpvgBFLF4ouF0fnSL3pQqp0MJgY6ururCxB8cTPMpHM+MsqFUPIvFG+jJ5nLW71yDu58+jw== X-Received: by 2002:a24:3989:: with SMTP id l131-v6mr20215380ita.28.1525263677634; Wed, 02 May 2018 05:21:17 -0700 (PDT) Original-Received: from zebian (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34]) by smtp.googlemail.com with ESMTPSA id e15-v6sm5593805ioc.54.2018.05.02.05.21.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 02 May 2018 05:21:16 -0700 (PDT) In-Reply-To: <5AE957BA.6000809@gmx.at> (martin rudalics's message of "Wed, 02 May 2018 08:16:26 +0200") 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:145919 Archived-At: --=-=-= Content-Type: text/plain martin rudalics writes: > and the only ways this could cause w != XWINDOW(selected_window) > before the last call is either !WINDOWP (selected_window) or that > clear_garbaged_frames or prepare_menu_bars change selected_window. > Can you find the responsible? Yes, found it, seems to be a combination of zoom window-size-change-functions called via prepare_menu_bars and doom advice on balance-windows. I got 12 changes of selected_window. First hit summarized inline, the rest of the backtraces are attached below. #0 select_window_1 (window=XIL(0x1601c35), inhibit_point_swap=false) at ../../src/window.c:562 #1 0x00000000004aff15 in select_window (window=XIL(0x1601c35), norecord=XIL(0xc090), inhibit_point_swap=false) at ../../src/window.c:520 #2 0x00000000004b0183 in Fselect_window (window=XIL(0x1601c35), norecord=XIL(0xc090)) at ../../src/window.c:590 #3 0x00000000004beaa7 in Fdelete_window_internal (window=XIL(0x1696c35)) at ../../src/window.c:4667 #79 0x0000000000441b1a in safe_call1 (fn=XIL(0x4a9e6d0), arg=XIL(0x1600c35)) at ../../src/xdisp.c:2644 #80 0x00000000004bb27a in run_window_size_change_functions (frame=XIL(0x1600c35)) at ../../src/window.c:3457 #81 0x0000000000460409 in prepare_menu_bars () at ../../src/xdisp.c:12065 #82 0x0000000000465141 in redisplay_internal () at ../../src/xdisp.c:13937 #83 0x0000000000463c16 in redisplay () at ../../src/xdisp.c:13518 Lisp Backtrace: [...] "delete-window" (0xffff9ab0) [...] "doom/popup-close" (0xffffa068) [...] "doom*popups-save" (0xffffaa00) [...] "ad-Advice-balance-windows" (0xffffb530) "apply" (0xffffb528) "balance-windows" (0xffffb960) "let" (0xffffbcc0) "zoom--update" (0xffffbe10) [...] "zoom--handler" (0xffffc928) "redisplay_internal (C function)" (0x0) (defun zoom--on () [...] (add-hook 'window-size-change-functions #'zoom--handler) (defun zoom--handler (&optional window-or-frame norecord) [...] (with-selected-window [...] (zoom--update)))) (defun zoom--update () "Update the window layout in the current frame." (let (;; temporarily disables this mode during resize to avoid infinite ;; recursion (probably not needed thanks to the following) (zoom-mode nil) ;; temporarily disable all (even external) hooks about window ;; configuration changes to try to avoid potential flickering since ;; `balance-windows' calls them (window-configuration-change-hook nil) ;; make sure that other windows are resized nicely after resizing the ;; selected one (window-combination-resize t) ;; make sure that the exact same amount of pixels is assigned to all the ;; siblings (window-resize-pixelwise t)) ;; start from a balanced layout anyway (balance-windows) ;; check if the selected window is not ignored (unless (zoom--window-ignored-p) (zoom--resize) (zoom--fix-scroll)))) ;; doom/core/core-popups.el: (advice-add #'balance-windows :around #'doom*popups-save) (defun doom*popups-save (orig-fn &rest args) "Sets aside all popups before executing the original function, usually to prevent the popup(s) from messing up the UI (or vice versa)." (save-popups! (apply orig-fn args))) (defmacro save-popups! (&rest body) "Sets aside all popups before executing the original function, usually to prevent the popup(s) from messing up the UI (or vice versa)." `(let ((in-popup-p (doom-popup-p)) (popups (doom-popup-windows)) (doom-popup-remember-history t) (doom-popup-inhibit-autokill t)) (when popups (mapc #'doom/popup-close popups)) (unwind-protect (progn ,@body) (when popups (let ((origin (selected-window))) (doom/popup-restore) (unless in-popup-p (select-window origin))))))) --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=bug-31312.gdbinit.diff Content-Description: gdbinit modifications to catch bug diff --git i/src/.gdbinit w/src/.gdbinit index cc06b2e11c..0ebf07f0f7 100644 --- i/src/.gdbinit +++ w/src/.gdbinit @@ -1264,6 +1264,35 @@ commands end +watch selected_window +set $selwindow_watch = $bpnum +commands $selwindow_watch + bt +end +disable $selwindow_watch + +# this one never happens, I think +break xdisp.c:13929 if !WINDOWP(selected_window) + +break xdisp.c:13929 if WINDOWP(selected_window) +commands + silent + enable $selwindow_watch + continue +end +set $enable_selwindow_watch = $bpnum +disable $enable_selwindow_watch +printf "selected window watch enabler = %d\n", $enable_selwindow_watch + +break xdisp.c:13939 if !NILP(w->contents) +commands + silent + disable $selwindow_watch + continue +end + +break xdisp.c:13939 if NILP(w->contents) + # Put the Python code at the end of .gdbinit so that if GDB does not # support Python, GDB will do all the above initializations before # reporting an error. --=-=-= Content-Type: application/gzip Content-Disposition: attachment; filename=selwindow.log.gz Content-Transfer-Encoding: base64 Content-Description: gdb backtraces of the selected_window changes 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 MxuEvlbObF3vs9yZDcFCC2e2bk4UuTNbnWis5MymAUMrZzbmCbJ1Zo+VJ2hsZza4nPmc2XT6sDmz 4Wk9lTMbwSFszmwzcMh5OrOBJjKdMxuQIuM7s8EAbe3MBouzob/VZC2xcWbDWjKBMxsWGWtnNlqf LZzZul5PuTMbLGoWzmxNXY+CM5tH1gPWZxtnNhif7Z3ZWqJSuTNbQ1Mqd2brsgDkzmweRSnYnjmc 2SBzs3Nma88HqTObZz6A9dnGmQ3GZ3tntt58kDqzteaDzJmtPR+kzmye+QDu5bGd2fr6anNntqa8 WsGZrT6RVJzZYH22cWYbGKBlzmwe1aiB91nmzEYYnLkzW/eFiNyZzaOe7khjY+/MpjPipM5sOplY nNlgd+ZyZoMB2t6ZzTO/wPps5czWzsEsdWbzPKjAzjy2MxseVHzObHgucTmz4b3DRM5ssBzzObOp pfiindnwKmQ6Z7Yq9dnAmW1GfT65M1uf+szhzDbPDi11ZtMVi82ZDfHQqZzZiGbmcmaDpfiSrdlo WZ7Sm62fNdbCmw1nCXtvtjpISc2bDZw+K2+2dnpMuTebh9OH7uXRvdm6YRUbbzYYoO292aDwMrXV 6tudpd5sOEOwebN14QIK3mwmuAAVRY3gzdbP0Cz1ZvOkaEbrs5U3GwRC9t5sUP+YepbhlG3jzdZN yazgzeYB+aGdeXRvNmxlGb3ZdOJcmjcbfMsn8WbntBWc3mzqYh7Lm00tziN7s6kJ2sKbTbI6W3mz SepmE282dQKfqTeb5GD9nL3Z4Fk29mbTXcF5ebPBw8zizQbJ09TebDBCm3qzaXZnC282BTCYe7MJ I8F5s50323mznTf7/4c3eyCltJ8FCxVv9vZnZ+fNtmqXoTd7X+fpvdmDTemtkMGbva249/zhUkrv 9nFnYlx2KaVdSmnNDjq5cdmllN5flEsp7VJKu5TSLqV0X+TFpZTehftcSmmXUppBzuVSSruU0lsn jUspbWBcdimlX94Tl1LafOS6lNK9V+tSSr8wLruU0i6ltEsp7VJKu5TSXVfpUkq7lNJkKXAppV1K aZdSel+0Syk9EOJ1KaVdSmmXUnrpUkqzGpddSmmXUtqllLaxLbuU0i6ltEsp/bJ0l1Ja/UJdSmmX UrrvfOxSSruU0i6ltEsp7X3mtmWXUtqllHYppZ1t2dmWnW3Z2ZbPyra88ya7lNIupbRLKb1rjEsp 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 --=-=-=--