From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: sk6875@gmail.com Newsgroups: gmane.emacs.bugs Subject: Re: bug#28544: 26.0.50; emacs will consume 100% cpu after gdb debugee exits Date: Sat, 28 Oct 2017 07:10:07 -0700 (PDT) Message-ID: <848a7a7c-1983-47ed-8d15-6d64b4634e1a@googlegroups.com> References: 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 1509208961 4782 195.159.176.226 (28 Oct 2017 16:42:41 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 28 Oct 2017 16:42:41 +0000 (UTC) Injection-Date: Sat, 28 Oct 2017 14:10:07 +0000 User-Agent: G2/1.0 To: bug-gnu-emacs@gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Oct 28 18:42:36 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 1e8UBp-0008Uj-1F for geb-bug-gnu-emacs@m.gmane.org; Sat, 28 Oct 2017 18:42:29 +0200 Original-Received: from localhost ([::1]:33416 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e8UBw-0000y1-HP for geb-bug-gnu-emacs@m.gmane.org; Sat, 28 Oct 2017 12:42:36 -0400 X-Received: by 10.200.26.221 with SMTP id h29mr23639679qtk.19.1509199807748; Sat, 28 Oct 2017 07:10:07 -0700 (PDT) X-Received: by 10.31.50.18 with SMTP id y18mr1053018vky.6.1509199807707; Sat, 28 Oct 2017 07:10:07 -0700 (PDT) Original-Path: usenet.stanford.edu!z50no4105189qtj.0!news-out.google.com!v14ni2403qtc.0!nntp.google.com!z50no4105184qtj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Original-Newsgroups: gnu.emacs.bug In-Reply-To: Complaints-To: groups-abuse@google.com Original-Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=211.226.22.59; posting-account=JjGBTwoAAADR_bb0DTxtM8MmTzfzmvHM Original-NNTP-Posting-Host: 211.226.22.59 Original-Xref: usenet.stanford.edu gnu.emacs.bug:157403 X-Mailman-Approved-At: Sat, 28 Oct 2017 12:42:14 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.21 Precedence: list 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:139117 Archived-At: On Friday, September 22, 2017 at 3:18:10 AM UTC+9, Sung Ho Kim wrote: > First time using the bug report system, so apologies in advance if the > report feels muddled. >=20 > 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 differen= ce) > 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. >=20 > 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 (pro= c) > && !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. >=20 > 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: >=20 > else if (nread =3D=3D 0 && !NETCONN_P (proc) && !SERIALCONN_P (pro= c) > && !PIPECONN_P (proc)) > #ifdef DARWIN_OS > { > struct Lisp_Process *p =3D XPROCESS (proc); >=20 > /* Clear the descriptor now, so we only raise the > signal once. */ > delete_read_fd (channel); >=20 > 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 */ >=20 > 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. >=20 > Thank you for your patience and your great work developing this great OS. >=20 >=20 > 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. >=20 > Configured using: > 'configure --prefix=3D/opt/local/emacs-git --without-makeinfo > --without-ns --without-pop --without-mailutils' >=20 > Configured features: > DBUS NOTIFY ACL GNUTLS LIBXML2 ZLIB >=20 > Important settings: > value of $LC_ALL: en_US.UTF-8 > locale-coding-system: utf-8-unix >=20 > Major mode: Fundamental >=20 > 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 >=20 > Load-path shadows: > ~/.emacs.d/lisp/expand-region-core hides /Users/sk68/.emacs.d/elpa/expand= -region-0.11.0/expand-region-core > ~/.emacs.d/lisp/linum hides /opt/local/emacs-git/share/emacs/26.0.50/lisp= /linum >=20 > 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) >=20 > 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)) Any updates on this?