From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Sung Ho Kim Newsgroups: gmane.emacs.bugs Subject: bug#28544: 26.0.50; emacs will consume 100% cpu after gdb debugee exits Date: Wed, 20 Sep 2017 12:03:37 +0900 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1506017893 26569 195.159.176.226 (21 Sep 2017 18:18:13 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 21 Sep 2017 18:18:13 +0000 (UTC) To: 28544@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Sep 21 20:18:08 2017 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 1dv633-0006Vz-4C for geb-bug-gnu-emacs@m.gmane.org; Thu, 21 Sep 2017 20:18:05 +0200 Original-Received: from localhost ([::1]:55011 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dv63A-00023Y-Ix for geb-bug-gnu-emacs@m.gmane.org; Thu, 21 Sep 2017 14:18:12 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59381) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dv633-000235-GN for bug-gnu-emacs@gnu.org; Thu, 21 Sep 2017 14:18:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dv630-0006TS-HT for bug-gnu-emacs@gnu.org; Thu, 21 Sep 2017 14:18:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:43172) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dv630-0006TK-F0 for bug-gnu-emacs@gnu.org; Thu, 21 Sep 2017 14:18:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dv630-0006PB-9E for bug-gnu-emacs@gnu.org; Thu, 21 Sep 2017 14:18:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Sung Ho Kim Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 21 Sep 2017 18:18:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 28544 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.150601785524577 (code B ref -1); Thu, 21 Sep 2017 18:18:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 21 Sep 2017 18:17:35 +0000 Original-Received: from localhost ([127.0.0.1]:51853 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dv62Y-0006OL-UL for submit@debbugs.gnu.org; Thu, 21 Sep 2017 14:17:35 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:39005) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dv5yI-0006H8-Gp for submit@debbugs.gnu.org; Thu, 21 Sep 2017 14:13:10 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dv5y8-0001n7-KO for submit@debbugs.gnu.org; Thu, 21 Sep 2017 14:13:05 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:56571) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dv5y8-0001mt-Hk for submit@debbugs.gnu.org; Thu, 21 Sep 2017 14:13:00 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:58136) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dv5y6-00007A-QF for bug-gnu-emacs@gnu.org; Thu, 21 Sep 2017 14:13:00 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dv5y3-0001i7-4w for bug-gnu-emacs@gnu.org; Thu, 21 Sep 2017 14:12:58 -0400 Original-Received: from [211.226.22.59] (port=50161 helo=dana.local) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dv5y2-0001gS-IH for bug-gnu-emacs@gnu.org; Thu, 21 Sep 2017 14:12:55 -0400 Original-Received: by dana.local (Postfix, from userid 501) id 64F9184816B; Wed, 20 Sep 2017 12:03:37 +0900 (KST) X-detected-operating-system: by eggs.gnu.org: Mac OS X [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Mailman-Approved-At: Thu, 21 Sep 2017 14:17:34 -0400 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:137217 Archived-At: First time using the bug report system, so apologies in advance if the report feels muddled. The procedure I had used is as follows: 1) open emacs [-Q] [-nw] N.B. the option flags -Q -nw do not make any difference in the behavior described. 2) run gdb using M-x gdb ( I have tested gdb 7.12 and 8.0, 8.0.1 and even earlier versions but gdb version do not seem to make any difference) 3) open any executable binary for debugging. 4) continue, step, next or run until binary in step (3) finishes execution and exits (whether it exits normally or abnormally does not make a difference) 5) open top and watch emacs cpu usage. What I have noticed with a little bit of debugging and looking at the emacs source code is that in process.c in about line 5660 (thankfully process.c receives very little changes recently so the line number should be approximately accurate) you see the following code: ------------------------------------------------------------------- /* If we can detect process termination, don't consider the process gone just because its pipe is closed. */ else if (nread =3D=3D 0 && !NETCONN_P (proc) && !SERIALCONN_P (proc) && !PIPECONN_P (proc)) ------------------------------------------------------------------- This if clause becomes true when the debugee exits in Mac OS Sierra (10.12.6, BuildVersion 16G29, Darwin Kernel Version 16.7.0) and since nothing is done about the read file descriptor (proc's infd, outfd, channel) this results in an infinite loop where thread_select keeps returning nfds =3D 1 but the subsequent read operation will not return an error (i.e. nread will never be < 0) and nread will always be 0. I feel this infinite loop is the cause of the 100% cpu usage behavior. To test this theory, I added the same code used in the (nread =3D=3D -1 && errno =3D=3D EIO) condition to the (nread =3D=3D 0 && !NETCONN_P (proc) && !SERIALCONN_P (proc) && !PIPECONN_P= (proc)) condition to remove the target file descriptor when this condition is encountered as such: else if (nread =3D=3D 0 && !NETCONN_P (proc) && !SERIALCONN_P (proc) && !PIPECONN_P (proc)) #ifdef DARWIN_OS { struct Lisp_Process *p =3D XPROCESS (proc); /* Clear the descriptor now, so we only raise the signal once. */ delete_read_fd (channel); if (p->pid =3D=3D -2) { /* If the EIO occurs on a pty, the SIGCHLD handler's waitpid call will not find the process object to delete. Do it here. */ p->tick =3D ++process_tick; pset_status (p, Qfailed); } } #else ; #endif /* DARWIN_OS */ after rebuilding with the aforementioned change, the 100% cpu usage disappears. I have refrained from offering a patch because I am not fully knowledgeable with the code and its possible side effects. Thank you for your patience and your great work developing this great OS. In GNU Emacs 26.0.50 (build 2, x86_64-apple-darwin16.7.0) of 2017-09-20 built on dana.local Repository revision: bc511a64f6da9ab51acc7c8865e80c4a4cb655c2 Recent messages: applying putty GNU screen fixes. Reusing Dired buffers is now ON Turning on magit-auto-revert-mode...done ad-handle-definition: =E2=80=98compilation-start=E2=80=99 got redefined For information about GNU Emacs and the GNU system, type C-h C-a. Configured using: 'configure --prefix=3D/opt/local/emacs-git --without-makeinfo --without-ns --without-pop --without-mailutils' Configured features: DBUS NOTIFY ACL GNUTLS LIBXML2 ZLIB Important settings: value of $LC_ALL: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: Fundamental Minor modes in effect: diff-auto-refine-mode: t magit-auto-revert-mode: t global-git-commit-mode: t async-bytecomp-package-mode: t shell-dirtrack-mode: t bury-successful-compilation: t global-auto-complete-mode: t cl-old-struct-compat-mode: t tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t buffer-read-only: t line-number-mode: t transient-mark-mode: t Load-path shadows: ~/.emacs.d/lisp/expand-region-core hides /Users/sk68/.emacs.d/elpa/expand-r= egion-0.11.0/expand-region-core ~/.emacs.d/lisp/linum hides /opt/local/emacs-git/share/emacs/26.0.50/lisp/l= inum Features: (shadow sort mail-extr emacsbug sendmail term/xterm xterm flymake flymake-proc compile flymake-ui display-line-numbers elec-pair magit-obsolete magit-blame magit-stash magit-bisect magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-branch magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log magit-diff smerge-mode diff-mode magit-core magit-autorevert autorevert filenotify magit-process magit-margin magit-mode magit-git magit-section magit-popup git-commit magit-utils crm log-edit message subr-x puny rfc822 mml mml-sec epa epg gnus-util rmail rmail-loaddefs time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log with-editor cl-extra async-bytecomp async shell pcomplete comint ansi-color ring server dash help-mode dired+ image-dired image-mode format-spec image-file image dired-x dired-aux dired dired-loaddefs cl findheader compilation-window-helper bury-successful-compilation advice auto-complete-config auto-complete popup ztree ztree-diff ztree-diff-model ztree-dir easy-mmode ztree-view edmacro kmacro ztree-util jison-mode bison-mode derived cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs regexp-opt finder-inf info tool-bar package easymenu epg-config url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer select mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote dbusbind kqueue multi-tty make-network-process emacs) Memory information: ((conses 16 267423 9498) (symbols 48 33034 2) (miscs 40 79 97) (strings 32 73135 3249) (string-bytes 1 2304657) (vectors 16 29273) (vector-slots 8 620415 7189) (floats 8 124 327) (intervals 56 240 0) (buffers 992 12))