GNU bug report logs - #26397
25.1; call-process slow on macOS and slower on larger frames

Previous Next

Package: emacs;

Reported by: Aaron Jensen <aaronjensen <at> gmail.com>

Date: Sat, 8 Apr 2017 06:26:02 UTC

Severity: normal

Tags: fixed

Found in version 25.1

Fixed in version 26.1

Done: Alan Third <alan <at> idiocy.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 26397 in the body.
You can then email your comments to 26397 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sat, 08 Apr 2017 06:26:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Aaron Jensen <aaronjensen <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sat, 08 Apr 2017 06:26:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Aaron Jensen <aaronjensen <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.1; call-process slow on macOS and slower on larger frames
Date: Fri, 7 Apr 2017 23:25:24 -0700
It seems that `call-process' on macOS is quite a bit slower than it is
on linux. Not only that, but the performance degrades as the frame gets
larger.

Using this as a benchmark in 'emacs -Q':

(benchmark 1 '(call-process "/usr/bin/true" nil nil nil))

With a small frame (default emacs size):

Elapsed time: 0.003509s

With a larger frame (about 1500x1500px):

Elapsed time: 0.007011s

On Linux it's been reported that times are typically in the 1-2ms range.

I originally came across this via this magit issue:
https://github.com/magit/magit/issues/2909 because magit, for many
common operations, can call call-process many times, making the
performance difference significant. Note that people in the thread are
seeing even worse performance.

Thanks,

Aaron



In GNU Emacs 25.1.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47
Version 10.11.6 (Build 15G1217))
 of 2017-04-07 built on aaronmbp.local
Windowing system distributor 'Apple', version 10.3.1404
Configured using:
 'configure --disable-dependency-tracking --disable-silent-rules
 --enable-locallisppath=/usr/local/share/emacs/site-lisp
 --infodir=/usr/local/Cellar/emacs-plus/25.1/share/info/emacs
 --prefix=/usr/local/Cellar/emacs-plus/25.1 --with-xml2 --without-dbus
 --with-gnutls --with-imagemagick --with-modules --with-rsvg --with-ns
 --disable-ns-self-contained'

Configured features:
JPEG RSVG IMAGEMAGICK NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS
NS MODULES

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Text

Minor modes in effect:
  eros-mode: t
  projectile-mode: t
  recentf-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  flyspell-mode: t
  org-mobile-sync-mode: t
  magit-auto-revert-mode: t
  evil-mc-mode: t
  hl-todo-mode: t
  global-spacemacs-whitespace-cleanup-mode: t
  spacemacs-whitespace-cleanup-mode: t
  ws-butler-global-mode: t
  ws-butler-mode: t
  winum-mode: t
  winner-mode: t
  volatile-highlights-mode: t
  global-vi-tilde-fringe-mode: t
  vi-tilde-fringe-mode: t
  pupo-mode: t
  purpose-mode: t
  spaceline-info-mode: t
  spaceline-helm-mode: t
  save-place-mode: t
  savehist-mode: t
  popwin-mode: t
  persp-mode: t
  Info-breadcrumbs-in-mode-line-mode: t
  global-git-gutter+-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  shell-dirtrack-mode: t
  global-flycheck-mode: t
  flx-ido-mode: t
  eyebrowse-mode: t
  global-evil-surround-mode: t
  evil-surround-mode: t
  global-evil-search-highlight-persist: t
  evil-search-highlight-persist: t
  show-smartparens-global-mode: t
  show-smartparens-mode: t
  evil-escape-mode: t
  global-anzu-mode: t
  anzu-mode: t
  eval-sexp-fu-flash-mode: t
  editorconfig-mode: t
  dtrt-indent-mode: t
  diff-auto-refine-mode: t
  counsel-mode: t
  ivy-mode: t
  clean-aindent-mode: t
  hybrid-mode: t
  which-key-mode: t
  override-global-mode: t
  global-undo-tree-mode: t
  undo-tree-mode: t
  evil-mode: t
  evil-local-mode: t
  spacemacs-leader-override-mode: t
  global-spacemacs-leader-override-mode: t
  global-hl-line-mode: t
  xterm-mouse-mode: t
  global-auto-revert-mode: t
  ido-vertical-mode: t
  global-page-break-lines-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  auto-fill-function: yas--auto-fill
  transient-mark-mode: t
  abbrev-mode: t

Recent messages:
Added 2 events for today
Saving file /Users/aaronjensen/.emacs.d/.cache/work.org...
Wrote /Users/aaronjensen/.emacs.d/.cache/work.org
Fetched data overwrote
/Users/aaronjensen/.emacs.d/.cache/work.org
org-mode fontification error in #<buffer Programming.org> at 37
org-mode fontification error in #<buffer Programming.org> at 55
org-mode fontification error in #<buffer emacs.org> at 19
org-mode fontification error in #<buffer todo.org> at 107
Added 2 events for today

Load-path shadows:
/Users/aaronjensen/.emacs.d/elpa/25.1/org-bullets-20140918.1137/org-bullets
hides /Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-bullets
/Users/aaronjensen/.emacs.d/elpa/25.1/ht-20161015.1945/ht hides
/Users/aaronjensen/.emacs.d/core/libs/ht
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-texinfo
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-texinfo
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-publish
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-publish
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-org
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-org
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-odt
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-odt
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-md
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-md
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-man
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-man
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-latex
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-latex
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-icalendar
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-icalendar
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-html
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-html
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-beamer
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-beamer
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ox-ascii
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ox-ascii
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-w3m
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-w3m
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-version
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-version
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-timer
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-timer
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-table
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-table
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-src
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-src
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-rmail
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-rmail
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-protocol
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-protocol
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-plot
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-plot
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-pcomplete
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-pcomplete
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-mouse
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-mouse
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-mobile
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-mobile
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-mhe
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-mhe
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-macs
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-macs
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-macro
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-macro
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-loaddefs
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-loaddefs
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-list
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-list
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-irc
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-irc
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-install
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-install
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-inlinetask
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-inlinetask
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-info
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-info
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-indent
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-indent
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-id
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-id
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-habit
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-habit
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-gnus
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-gnus
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-footnote
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-footnote
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-feed
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-feed
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-faces
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-faces
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-eshell
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-eshell
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-entities
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-entities
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-element
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-element
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-docview
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-docview
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-datetree
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-datetree
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-ctags
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-ctags
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-crypt
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-crypt
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-compat
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-compat
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-colview
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-colview
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-clock
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-clock
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-capture
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-capture
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-bibtex
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-bibtex
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-bbdb
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-bbdb
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-attach
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-attach
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-archive
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-archive
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/org-agenda
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/org-agenda
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-tangle
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-tangle
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-table
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-table
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-sqlite
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-sqlite
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-sql
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-sql
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-shen
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-shen
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-screen
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-screen
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-scheme
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-scheme
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-scala
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-scala
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-sass
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-sass
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-ruby
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-ruby
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-ref
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-ref
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-R
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-R
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-python
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-python
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-plantuml
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-plantuml
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-picolisp
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-picolisp
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-perl
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-perl
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-org
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-org
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-octave
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-octave
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-ocaml
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-ocaml
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-mscgen
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-mscgen
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-maxima
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-maxima
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-matlab
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-matlab
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-makefile
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-makefile
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-lob
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-lob
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-lisp
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-lisp
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-lilypond
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-lilypond
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-ledger
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-ledger
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-latex
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-latex
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-keys
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-keys
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-js
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-js
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-java
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-java
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-io
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-io
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-haskell
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-haskell
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-gnuplot
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-gnuplot
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-fortran
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-fortran
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-exp
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-exp
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-eval
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-eval
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-emacs-lisp
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-emacs-lisp
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-dot
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-dot
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-ditaa
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-ditaa
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-css
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-css
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-core
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-core
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-comint
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-comint
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-clojure
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-clojure
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-calc
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-calc
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-C
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-C
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-awk
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-awk
/Users/aaronjensen/.emacs.d/elpa/25.1/org-plus-contrib-20170210/ob-asymptote
hides /usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/org/ob-asymptote
/Users/aaronjensen/.emacs.d/elpa/25.1/seq-2.19/seq hides
/usr/local/Cellar/emacs-plus/25.1/share/emacs/25.1/lisp/emacs-lisp/seq

Features:
(shadow sort mail-extr emacsbug sendmail appt diary-lib diary-loaddefs
alchemist alchemist-macroexpand alchemist-company alchemist-help
alchemist-complete alchemist-refcard alchemist-phoenix alchemist-compile
alchemist-iex alchemist-message alchemist-hooks alchemist-hex
alchemist-mix alchemist-info alchemist-goto alchemist-scope
alchemist-eval alchemist-interact alchemist-server alchemist-execute
alchemist-report alchemist-test-mode alchemist-project alchemist-file
alchemist-key alchemist-utils smartparens-elixir flycheck-dialyxir
flycheck-credo flycheck-dogma elixir-mode pkg-info epl elixir-smie
sh-script executable pp benchmark elp colir smex magit-gitflow vc-git
auto-compile packed elisp-slime-nav eros evil-cleverparens
evil-cleverparens-text-objects evil-cleverparens-util paredit
flycheck-package package-lint finder nameless goto-addr bug-reference
auto-highlight-symbol highlight-numbers parent-mode
highlight-parentheses hideshow rainbow-delimiters projectile grep
compile open-junk-file recentf tree-widget company-files
company-keywords company-etags company-gtags company-template
company-dabbrev-code company-dabbrev company-capf company org-eldoc
evil-org ob-clojure ob-shell org-bullets org-download toc-org
clojure-snippets yasnippet flyspell ispell org-indent image-file
org-rmail org-mhe org-irc org-info org-gnus nnir org-docview doc-view
org-bibtex bibtex org-bbdb org-w3m editorconfig-core
editorconfig-core-handle editorconfig-fnmatch org-mobile-sync org-mobile
org-agenda org-gcal org-archive ob-elixir ob-http ob-http-mode
ob-restclient restclient ox-gfm ox-md ox-reveal ox-odt rng-loc rng-uri
rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns
nxml-enc xmltok nxml-util ox-latex ox-icalendar ox-html table ox-ascii
ox-publish ox orgit org-element avl-tree magithub magithub-ci
magithub-issue magithub-proxy magithub-cache magithub-core git-rebase
magit-gh-pulls gh gh-users gh-issues gh-pulls gh-repos gh-comments
gh-gist gh-oauth gh-api logito gh-cache pcache eieio-base gh-auth gh-url
url-http url-auth url-gw evil-magit 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 magit-core magit-autorevert magit-process
magit-margin magit-mode magit-git crm magit-section magit-popup org
org-macro org-footnote org-pcomplete org-list org-faces org-entities
org-version ob-emacs-lisp ob ob-tangle org-src ob-ref ob-lob ob-table
ob-keys ob-exp ob-comint ob-core ob-eval org-compat org-macs
org-loaddefs cal-menu calendar cal-loaddefs gnus-sum gnus-group
gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source tls gnutls
utf7 netrc nnoo parse-time gnus-spec gnus-int gnus-range gnus-win gnus
gnus-ems nnheader request-deferred deferred request url url-proxy
url-privacy url-expand url-methods url-history url-cookie url-domsuf
url-util mailcap alert log4e notifications dbus xml gntp fill-or-unfill
company-simple-complete init-typescript init-flyspell
init-terminal-cursor evil-terminal-cursor-changer init-org init-magit
evil-mc evil-mc-command-execute evil-mc-command-record
evil-mc-cursor-make evil-mc-region evil-mc-cursor-state evil-mc-undo
evil-mc-vars evil-mc-known-commands evil-mc-common hl-todo xterm-color
spacemacs-whitespace-cleanup ws-butler winum winner window-purpose-x
imenu-list imenu ibuf-ext ibuffer volatile-highlights vi-tilde-fringe
tmux spacemacs-purpose-popwin window-purpose window-purpose-fixes
window-purpose-prefix-overload window-purpose-switch let-alist
window-purpose-layout window-purpose-core window-purpose-configuration
window-purpose-utils spaceline-config spaceline-segments spaceline
powerline powerline-separators color powerline-themes smartparens-config
smartparens-ruby saveplace savehist ruby-test-mode pcre2el rxt
re-builder ruby-mode smie popwin persp-mode osx-trash linum ivy-hydra
info+ image-mode git-gutter-fringe+ fringe-helper git-gutter+ git-commit
with-editor async-bytecomp async tramp-sh server magit-utils log-edit
message dired rfc822 mml mml-sec epg mailabbrev mail-utils gmm-utils
mailheader pcvs-util add-log docker-tramp tramp-cache tramp tramp-compat
tramp-loaddefs trampver shell pcomplete comint ansi-color gh-common
gh-profile marshal flycheck-flow flycheck find-func flx-ido eyebrowse
format-spec evil-unimpaired f s evil-surround
evil-search-highlight-persist evil-numbers evil-lisp-state smartparens
dash evil-indent-plus evil-exchange evil-escape evil-args evil-anzu anzu
cider-eval-sexp-fu eval-sexp-fu highlight editorconfig rx noutline
outline dtrt-indent diff-hl vc-dir ewoc vc vc-dispatcher diff-mode
counsel jka-compr esh-util etags xref project swiper ivy flx delsel
ivy-overlay ffap clean-aindent-mode adaptive-wrap hybrid-mode
exec-path-from-shell evil-evilified-state which-key use-package diminish
bind-key hydra lv cus-edit cus-start cus-load evil evil-integration
undo-tree diff evil-maps evil-commands evil-jumps evil-command-window
evil-types evil-search evil-ex evil-macros evil-repeat evil-states
evil-core evil-common windmove thingatpt rect evil-digraphs evil-vars
ring info bind-map quelpa url-parse auth-source gnus-util password-cache
url-vars package-build mm-decode mm-bodies mm-encode mail-parse rfc2231
rfc2047 rfc2045 ietf-drums mm-util help-fns mail-prsvr json map lisp-mnt
hl-line xt-mouse autorevert filenotify disp-table wid-edit monokai-theme
finder-inf init-html init-evil core-configuration-layer eieio-compat
cl-seq ht cl warnings package epg-config eieio eieio-core
ido-vertical-mode ido seq byte-opt bytecomp byte-compile cl-extra
help-mode cconv core-spacemacs core-use-package-ext core-transient-state
core-micro-state core-toggle core-keybindings core-fonts-support
core-spacemacs-buffer core-funcs cl-macs gv core-themes-support
core-display-init core-jump core-release-management core-custom-settings
core-dotspacemacs core-command-line core-debug edmacro kmacro derived
advice profiler easymenu cl-loaddefs cl-lib page-break-lines easy-mmode
subr-x pcase time-date mule-util tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel ns-win ucs-normalize
term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list newcomment elisp-mode lisp-mode prog-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core 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 charscript case-table epa-hook jka-cmpr-hook help
simple abbrev 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
kqueue cocoa ns multi-tty make-network-process emacs)

Memory information:
((conses 16 1382315 1069177)
 (symbols 48 78704 104)
 (miscs 40 2030 4673)
 (strings 32 216243 449110)
 (string-bytes 1 7392222)
 (vectors 16 114771)
 (vector-slots 8 2277782 350545)
 (floats 8 4739 6194)
 (intervals 56 35013 7656)
 (buffers 976 55))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sat, 08 Apr 2017 07:38:02 GMT) Full text and rfc822 format available.

Message #8 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
To: Aaron Jensen <aaronjensen <at> gmail.com>
Cc: 26397 <at> debbugs.gnu.org
Subject: Re: bug#26397: 25.1;
 call-process slow on macOS and slower on larger frames
Date: Sat, 08 Apr 2017 16:37:29 +0900
>>>>> On Fri, 7 Apr 2017 23:25:24 -0700, Aaron Jensen <aaronjensen <at> gmail.com> said:

> It seems that `call-process' on macOS is quite a bit slower than it is
> on linux. Not only that, but the performance degrades as the frame gets
> larger.

> Using this as a benchmark in 'emacs -Q':

> (benchmark 1 '(call-process "/usr/bin/true" nil nil nil))

> With a small frame (default emacs size):

> Elapsed time: 0.003509s

> With a larger frame (about 1500x1500px):

> Elapsed time: 0.007011s

> On Linux it's been reported that times are typically in the 1-2ms range.

> I originally came across this via this magit issue:
> https://github.com/magit/magit/issues/2909 because magit, for many
> common operations, can call call-process many times, making the
> performance difference significant. Note that people in the thread are
> seeing even worse performance.

Probably "fork" copies some GUI resources.  That would also explain
why the performance is worse on the Mac port, where each frame
allocates an extra NSWindow for overlaying.

It becomes much faster and seemingly unaffected by the frame size if
you comment out "#undef HAVE_WORKING_VFORK" and "#define vfork fork"
in src/conf_post.h.  But I'm not sure if it is safe.

				     YAMAMOTO Mitsuharu
				mituharu <at> math.s.chiba-u.ac.jp




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sat, 08 Apr 2017 15:48:02 GMT) Full text and rfc822 format available.

Message #11 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Aaron Jensen <aaronjensen <at> gmail.com>
To: YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Cc: 26397 <at> debbugs.gnu.org
Subject: Re: bug#26397: 25.1;
 call-process slow on macOS and slower on larger frames
Date: Sat, 8 Apr 2017 08:47:25 -0700
On Sat, Apr 8, 2017 at 12:37 AM, YAMAMOTO Mitsuharu
<mituharu <at> math.s.chiba-u.ac.jp> wrote:
>
> Probably "fork" copies some GUI resources.  That would also explain
> why the performance is worse on the Mac port, where each frame
> allocates an extra NSWindow for overlaying.
>
> It becomes much faster and seemingly unaffected by the frame size if
> you comment out "#undef HAVE_WORKING_VFORK" and "#define vfork fork"
> in src/conf_post.h.  But I'm not sure if it is safe.

Wow, that does make a big difference. The comment says that Emacs
hangs when evaluating:

(make-comint "test0" "/nodir/nofile" nil "")

But I can not reproduce that currently with vfork. I do not understand
the second comment: "Also, setsid is not allowed in the vfork child's
context as of Darwin 9/Mac OS X 10.5."

How might I test that?

I'm happy to run with a build that has this change for a while and see
how it goes.

Perhaps this is no longer an issue in current macOS? Are there any
version specific pragmas for osx?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sat, 08 Apr 2017 19:21:01 GMT) Full text and rfc822 format available.

Message #14 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Alan Third <alan <at> idiocy.org>
To: Aaron Jensen <aaronjensen <at> gmail.com>
Cc: 26397 <at> debbugs.gnu.org, YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Subject: Re: bug#26397: 25.1; call-process slow on macOS and slower on larger
 frames
Date: Sat, 8 Apr 2017 20:19:59 +0100
On Sat, Apr 08, 2017 at 08:47:25AM -0700, Aaron Jensen wrote:
> On Sat, Apr 8, 2017 at 12:37 AM, YAMAMOTO Mitsuharu
> <mituharu <at> math.s.chiba-u.ac.jp> wrote:
> >
> > Probably "fork" copies some GUI resources.  That would also explain
> > why the performance is worse on the Mac port, where each frame
> > allocates an extra NSWindow for overlaying.
> >
> > It becomes much faster and seemingly unaffected by the frame size if
> > you comment out "#undef HAVE_WORKING_VFORK" and "#define vfork fork"
> > in src/conf_post.h.  But I'm not sure if it is safe.
>
> Wow, that does make a big difference. The comment says that Emacs
> hangs when evaluating:
> 
> (make-comint "test0" "/nodir/nofile" nil "")
> 
> But I can not reproduce that currently with vfork. I do not understand
> the second comment: "Also, setsid is not allowed in the vfork child's
> context as of Darwin 9/Mac OS X 10.5."

It looks to me like we could replace the call to setsid with

    setpgid (0, 0);

for Darwin builds. However I can’t tell for sure if that function is
allowed after vfork, as I can’t even find any official reference to
setsid not being allowed.

I’m probably just not looking hard enough.

It seems the ‘correct’ solution for macOS is to use posix_spawn
instead of (v)fork/exec, but that would probably require a larger
change, and Daniel Colascione seems to have looked into it before, and
come across this very issue:

https://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00078.html

He doesn’t seem to have got an answer, though, and Emacs no longer
falls back to setpgid on any platform (see commit
dd0333b6155c9c3aabdac9418c005e2e5b4796e7).

> How might I test that?

The call to setsid is inside an `if` that’s to do with ptys. I suspect
it must come into play if you’re using Emacs in a text terminal,
rather than as a GUI app. I can’t check this just now as my master
won’t build...

-- 
Alan Third




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sun, 09 Apr 2017 13:03:02 GMT) Full text and rfc822 format available.

Message #17 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Alan Third <alan <at> idiocy.org>
To: Aaron Jensen <aaronjensen <at> gmail.com>
Cc: 26397 <at> debbugs.gnu.org, YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Subject: Re: bug#26397: 25.1; call-process slow on macOS and slower on larger
 frames
Date: Sun, 9 Apr 2017 14:01:55 +0100
On Sat, Apr 08, 2017 at 08:19:59PM +0100, Alan Third wrote:
> On Sat, Apr 08, 2017 at 08:47:25AM -0700, Aaron Jensen wrote:
> > On Sat, Apr 8, 2017 at 12:37 AM, YAMAMOTO Mitsuharu
> > <mituharu <at> math.s.chiba-u.ac.jp> wrote:
> > >
> > > Probably "fork" copies some GUI resources.  That would also explain
> > > why the performance is worse on the Mac port, where each frame
> > > allocates an extra NSWindow for overlaying.
> > >
> > > It becomes much faster and seemingly unaffected by the frame size if
> > > you comment out "#undef HAVE_WORKING_VFORK" and "#define vfork fork"
> > > in src/conf_post.h.  But I'm not sure if it is safe.
> >
> > Wow, that does make a big difference. The comment says that Emacs
> > hangs when evaluating:
> > 
> > (make-comint "test0" "/nodir/nofile" nil "")
> > 
> > But I can not reproduce that currently with vfork.

I can’t reproduce a hang with that command either.

> > I do not understand the second comment: "Also, setsid is not
> > allowed in the vfork child's context as of Darwin 9/Mac OS X
> > 10.5."
> 
> It looks to me like we could replace the call to setsid with
> 
>     setpgid (0, 0);
> 
> for Darwin builds.

No, forget that. It doesn’t do the same thing at all.

If you run Emacs, then

    M‐x ansi-term RET RET

You should get a shell prompt. Using fork/setsid, your shell will be
able to do job control, but using vfork it can’t. You can test this by
typing the `bg` command. Zsh (and I assume bash, etc.) responds by
telling you either there are no jobs, or that the shell has no job
control.

We could work around this in a rather ugly manner by doing something like:

#ifdef DARWIN_OS
  if (pty_flag)
    pid = fork ();
  else
    pid = vfork ();
#else
  pid = vfork ();
#endif

which would use fork where we’re expecting to run setsid, and vfork
otherwise.

-- 
Alan Third




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sun, 09 Apr 2017 15:08:02 GMT) Full text and rfc822 format available.

Message #20 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Aaron Jensen <aaronjensen <at> gmail.com>
To: Alan Third <alan <at> idiocy.org>
Cc: 26397 <at> debbugs.gnu.org, YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Subject: Re: bug#26397: 25.1;
 call-process slow on macOS and slower on larger frames
Date: Sun, 9 Apr 2017 08:07:26 -0700
That appears to work for me. Here's the patch I'm trying out:

https://gist.githubusercontent.com/aaronjensen/28e26a6c6c0dc767176bc35d5545d10e/raw/7fbbfa48fcf26d083e38cec9f174cef911a806ca/GNU-Emacs-25.1-OS-X-enable-vfork.patch

=======================================================

From 4a9221e2332d85d64978719a43f884b92bf6cb7b Mon Sep 17 00:00:00 2001
From: Aaron Jensen <aaronjensen <at> gmail.com>
Date: Sat, 8 Apr 2017 08:32:57 -0700
Subject: [PATCH 1/2] Enable vfork on macOS

---
 src/conf_post.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/conf_post.h b/src/conf_post.h
index 209f60792c..04c5cd6cf6 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -87,8 +87,8 @@ typedef bool bool_bf;
    (make-comint "test0" "/nodir/nofile" nil "") when /nodir/nofile
    does not exist.  Also, setsid is not allowed in the vfork child's
    context as of Darwin 9/Mac OS X 10.5.  */
-#undef HAVE_WORKING_VFORK
-#define vfork fork
+/* #undef HAVE_WORKING_VFORK */
+/* #define vfork fork */
 #endif  /* DARWIN_OS */

 /* If HYBRID_MALLOC is defined (e.g., on Cygwin), emacs will use
-- 
2.12.2


From 9a15fda33bf2b369207701b66cd8f93e2d3a8801 Mon Sep 17 00:00:00 2001
From: Aaron Jensen <aaronjensen <at> gmail.com>
Date: Sun, 9 Apr 2017 07:43:25 -0700
Subject: [PATCH 2/2] Only vfork if not pty

---
 src/process.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/process.c b/src/process.c
index 7ab92b0102..b49d5970c8 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1811,7 +1811,14 @@ create_process (Lisp_Object process, char
**new_argv, Lisp_Object current_dir)
   int volatile forkerr_volatile = forkerr;
   struct Lisp_Process *p_volatile = p;

-  pid = vfork ();
+  #ifdef DARWIN_OS
+    if (pty_flag)
+      pid = fork ();
+    else
+      pid = vfork ();
+  #else
+    pid = vfork ();
+  #endif

   current_dir = current_dir_volatile;
   lisp_pty_name = lisp_pty_name_volatile;
-- 
2.12.2

On Sun, Apr 9, 2017 at 6:01 AM, Alan Third <alan <at> idiocy.org> wrote:
> On Sat, Apr 08, 2017 at 08:19:59PM +0100, Alan Third wrote:
>> On Sat, Apr 08, 2017 at 08:47:25AM -0700, Aaron Jensen wrote:
>> > On Sat, Apr 8, 2017 at 12:37 AM, YAMAMOTO Mitsuharu
>> > <mituharu <at> math.s.chiba-u.ac.jp> wrote:
>> > >
>> > > Probably "fork" copies some GUI resources.  That would also explain
>> > > why the performance is worse on the Mac port, where each frame
>> > > allocates an extra NSWindow for overlaying.
>> > >
>> > > It becomes much faster and seemingly unaffected by the frame size if
>> > > you comment out "#undef HAVE_WORKING_VFORK" and "#define vfork fork"
>> > > in src/conf_post.h.  But I'm not sure if it is safe.
>> >
>> > Wow, that does make a big difference. The comment says that Emacs
>> > hangs when evaluating:
>> >
>> > (make-comint "test0" "/nodir/nofile" nil "")
>> >
>> > But I can not reproduce that currently with vfork.
>
> I can’t reproduce a hang with that command either.
>
>> > I do not understand the second comment: "Also, setsid is not
>> > allowed in the vfork child's context as of Darwin 9/Mac OS X
>> > 10.5."
>>
>> It looks to me like we could replace the call to setsid with
>>
>>     setpgid (0, 0);
>>
>> for Darwin builds.
>
> No, forget that. It doesn’t do the same thing at all.
>
> If you run Emacs, then
>
>     M‐x ansi-term RET RET
>
> You should get a shell prompt. Using fork/setsid, your shell will be
> able to do job control, but using vfork it can’t. You can test this by
> typing the `bg` command. Zsh (and I assume bash, etc.) responds by
> telling you either there are no jobs, or that the shell has no job
> control.
>
> We could work around this in a rather ugly manner by doing something like:
>
> #ifdef DARWIN_OS
>   if (pty_flag)
>     pid = fork ();
>   else
>     pid = vfork ();
> #else
>   pid = vfork ();
> #endif
>
> which would use fork where we’re expecting to run setsid, and vfork
> otherwise.
>
> --
> Alan Third




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sun, 09 Apr 2017 19:19:02 GMT) Full text and rfc822 format available.

Message #23 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Alan Third <alan <at> idiocy.org>
To: Aaron Jensen <aaronjensen <at> gmail.com>
Cc: 26397 <at> debbugs.gnu.org, YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Subject: [PATCH] Use vfork if possible on Darwin (bug#26397)
Date: Sun, 9 Apr 2017 20:18:49 +0100
src/conf_post.h: Remove defines forcing use of fork.
src/process.c (create_process): Use fork if pty_flag is set, otherwise
vfork.
---
 src/conf_post.h | 6 ------
 src/process.c   | 9 +++++++++
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/conf_post.h b/src/conf_post.h
index 30c948e39a..95ebd5511c 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -99,12 +99,6 @@ typedef bool bool_bf;
 #define realloc unexec_realloc
 #define free unexec_free
 #endif
-/* The following solves the problem that Emacs hangs when evaluating
-   (make-comint "test0" "/nodir/nofile" nil "") when /nodir/nofile
-   does not exist.  Also, setsid is not allowed in the vfork child's
-   context as of Darwin 9/Mac OS X 10.5.  */
-#undef HAVE_WORKING_VFORK
-#define vfork fork
 #endif  /* DARWIN_OS */
 
 /* If HYBRID_MALLOC is defined (e.g., on Cygwin), emacs will use
diff --git a/src/process.c b/src/process.c
index 2f2e5c1b25..47a85f1c95 100644
--- a/src/process.c
+++ b/src/process.c
@@ -2049,7 +2049,16 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
   int volatile forkerr_volatile = forkerr;
   struct Lisp_Process *p_volatile = p;
 
+#ifdef DARWIN_OS
+  /* Darwin doesn't let us run setsid after a vfork, so use fork when
+     necessary. */
+  if (pty_flag)
+    pid = fork ();
+  else
+    pid = vfork ();
+#else
   pid = vfork ();
+#endif
 
   current_dir = current_dir_volatile;
   lisp_pty_name = lisp_pty_name_volatile;
-- 

Here’s a tidied up version. If nobody complains I’ll push it in a few
days.

Thanks for your help.

-- 
Alan Third




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sun, 09 Apr 2017 20:33:02 GMT) Full text and rfc822 format available.

Message #26 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Andreas Schwab <schwab <at> linux-m68k.org>
To: Alan Third <alan <at> idiocy.org>
Cc: 26397 <at> debbugs.gnu.org, Aaron Jensen <aaronjensen <at> gmail.com>
Subject: Re: bug#26397: [PATCH] Use vfork if possible on Darwin (bug#26397)
Date: Sun, 09 Apr 2017 22:32:52 +0200
On Apr 09 2017, Alan Third <alan <at> idiocy.org> wrote:

> src/conf_post.h: Remove defines forcing use of fork.

That should list the removed macros.

	* src/conf_post.h (HAVE_WORKING_VFORK): Don't undef.
	(vfork): Don't define.

> src/process.c (create_process): Use fork if pty_flag is set, otherwise
> vfork.

That should say that it is only used when DARWIN_OS is defined.

	* src/process.c (create_process) [DARWIN_OS]: Use fork if
	pty_flag is set, otherwise vfork.

Andreas.

-- 
Andreas Schwab, schwab <at> linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sun, 09 Apr 2017 21:35:02 GMT) Full text and rfc822 format available.

Message #29 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Alan Third <alan <at> idiocy.org>
To: Andreas Schwab <schwab <at> linux-m68k.org>
Cc: 26397 <at> debbugs.gnu.org, Aaron Jensen <aaronjensen <at> gmail.com>
Subject: Re: bug#26397: [PATCH] Use vfork if possible on Darwin (bug#26397)
Date: Sun, 9 Apr 2017 22:34:30 +0100
On Sun, Apr 09, 2017 at 10:32:52PM +0200, Andreas Schwab wrote:
> On Apr 09 2017, Alan Third <alan <at> idiocy.org> wrote:
> 
> > src/conf_post.h: Remove defines forcing use of fork.
> 
> That should list the removed macros.
> 
> 	* src/conf_post.h (HAVE_WORKING_VFORK): Don't undef.
> 	(vfork): Don't define.
> 
> > src/process.c (create_process): Use fork if pty_flag is set, otherwise
> > vfork.
> 
> That should say that it is only used when DARWIN_OS is defined.
> 
> 	* src/process.c (create_process) [DARWIN_OS]: Use fork if
> 	pty_flag is set, otherwise vfork.

Thank you. I’ve fixed those now.

-- 
Alan Third




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Sun, 09 Apr 2017 23:47:02 GMT) Full text and rfc822 format available.

Message #32 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
To: Alan Third <alan <at> idiocy.org>
Cc: 26397 <at> debbugs.gnu.org, YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>,
 Aaron Jensen <aaronjensen <at> gmail.com>
Subject: Re: [PATCH] Use vfork if possible on Darwin (bug#26397)
Date: Mon, 10 Apr 2017 08:46:12 +0900
>>>>> On Sun, 9 Apr 2017 20:18:49 +0100, Alan Third <alan <at> idiocy.org> said:

> src/conf_post.h: Remove defines forcing use of fork.
> src/process.c (create_process): Use fork if pty_flag is set, otherwise
> vfork.

With this patch, setsid in callproc.c gets called in a vfork child
context.  It results in EPERM on Darwin.

According to ChangeLog, setsid in callproc.c seems to be used for
disconnecting from the controlling terminal (so as to avoid using
/dev/tty accidentally?).

1997-06-11  Paul Eggert  <eggert <at> twinsun.com>

	* callproc.c (Fcall_process): Use setsid to disconnect child
	process from controlling terminal.

If that is the case (i.e., if we don't have to make the child process
a session leader), then we don't need setsid when the Emacs process
doesn't have the controlling terminal, which is common for Mac-native
GUI sessions.  It doesn't apply for TTY or X11 sessions, but fork is
not that slow there.

				     YAMAMOTO Mitsuharu
				mituharu <at> math.s.chiba-u.ac.jp

diff --git a/src/callproc.c b/src/callproc.c
index 1e3d661eef..b3ffeb57af 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -591,6 +591,20 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
   pid = child_setup (filefd, fd_output, fd_error, new_argv, 0, current_dir);
 #else  /* not WINDOWSNT */
 
+#ifdef DARWIN_OS
+  /* Darwin doesn't let us run setsid after a vfork, so use fork when
+     necessary. */
+  bool did_fork_p;
+  int ctfd = emacs_open ("/dev/tty", O_NOCTTY, 0);
+
+  if (ctfd >= 0)
+    {
+      emacs_close (ctfd);
+      pid = fork ();
+      did_fork_p = true;
+    }
+  else
+#endif
   /* vfork, and prevent local vars from being clobbered by the vfork.  */
   {
     Lisp_Object volatile buffer_volatile = buffer;
@@ -609,6 +623,9 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
       callproc_fd_volatile[i] = callproc_fd[i];
 
     pid = vfork ();
+#ifdef DARWIN_OS
+    did_fork_p = false;
+#endif
 
     buffer = buffer_volatile;
     coding_systems = coding_systems_volatile;
@@ -631,6 +648,9 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
     {
       unblock_child_signal (&oldset);
 
+#ifdef DARWIN_OS
+      if (did_fork_p)
+#endif
       setsid ();
 
       /* Emacs ignores SIGPIPE, but the child should not.  */




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Mon, 10 Apr 2017 00:07:02 GMT) Full text and rfc822 format available.

Message #35 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Aaron Jensen <aaronjensen <at> gmail.com>
To: YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Cc: 26397 <at> debbugs.gnu.org, Alan Third <alan <at> idiocy.org>
Subject: Re: [PATCH] Use vfork if possible on Darwin (bug#26397)
Date: Sun, 9 Apr 2017 17:06:21 -0700
On Sun, Apr 9, 2017 at 4:46 PM, YAMAMOTO Mitsuharu
<mituharu <at> math.s.chiba-u.ac.jp> wrote:
> According to ChangeLog, setsid in callproc.c seems to be used for
> disconnecting from the controlling terminal (so as to avoid using
> /dev/tty accidentally?).
>
> 1997-06-11  Paul Eggert  <eggert <at> twinsun.com>
>
>         * callproc.c (Fcall_process): Use setsid to disconnect child
>         process from controlling terminal.
>
> If that is the case (i.e., if we don't have to make the child process
> a session leader), then we don't need setsid when the Emacs process
> doesn't have the controlling terminal, which is common for Mac-native
> GUI sessions.  It doesn't apply for TTY or X11 sessions, but fork is
> not that slow there.

For me, this slows down call-process in TTY emacs by 3ms (from
2.5ms->5.5ms). I typically launch a GUI emacs and connect to the
server in TTY via emacsclient, and in that scenario this patch does
not slow down call-process in the TTY, but it will affect those who
use TTY only, it seems.

Aaron




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Mon, 10 Apr 2017 01:12:01 GMT) Full text and rfc822 format available.

Message #38 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
To: Aaron Jensen <aaronjensen <at> gmail.com>
Cc: 26397 <at> debbugs.gnu.org, Alan Third <alan <at> idiocy.org>,
 YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Subject: Re: [PATCH] Use vfork if possible on Darwin (bug#26397)
Date: Mon, 10 Apr 2017 10:11:16 +0900
>>>>> On Sun, 9 Apr 2017 17:06:21 -0700, Aaron Jensen <aaronjensen <at> gmail.com> said:

> For me, this slows down call-process in TTY emacs by 3ms (from
> 2.5ms->5.5ms). I typically launch a GUI emacs and connect to the
> server in TTY via emacsclient, and in that scenario this patch does
> not slow down call-process in the TTY, but it will affect those who
> use TTY only, it seems.

Then use "obsolete" ioctl TIOCNOTTY instead of setsid?  I'm not
familiar with this matter, so could someone check if this is OK?  I
confirmed that only the controlling terminal of the child process was
detached.

				     YAMAMOTO Mitsuharu
				mituharu <at> math.s.chiba-u.ac.jp

diff --git a/src/callproc.c b/src/callproc.c
index 05048576ce..3f6df422f3 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -52,6 +52,8 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "syswait.h"
 #include "blockinput.h"
 #include "frame.h"
+#include "systty.h"
+#include "keyboard.h"
 
 #ifdef MSDOS
 #include "msdos.h"
@@ -626,7 +628,18 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
     {
       unblock_child_signal (&oldset);
 
+#ifdef DARWIN_OS
+      /* Darwin doesn't let us run setsid after a vfork, so use
+	 TIOCNOTTY when necessary. */
+      int j = emacs_open (DEV_TTY, O_RDWR, 0);
+      if (j >= 0)
+	{
+	  ioctl (j, TIOCNOTTY, 0);
+	  emacs_close (j);
+	}
+#else
       setsid ();
+#endif
 
       /* Emacs ignores SIGPIPE, but the child should not.  */
       signal (SIGPIPE, SIG_DFL);




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Mon, 10 Apr 2017 04:14:02 GMT) Full text and rfc822 format available.

Message #41 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Aaron Jensen <aaronjensen <at> gmail.com>
To: YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Cc: 26397 <at> debbugs.gnu.org, Alan Third <alan <at> idiocy.org>
Subject: Re: [PATCH] Use vfork if possible on Darwin (bug#26397)
Date: Sun, 9 Apr 2017 21:13:21 -0700
On Sun, Apr 9, 2017 at 6:11 PM, YAMAMOTO Mitsuharu
<mituharu <at> math.s.chiba-u.ac.jp> wrote:
>>>>>> On Sun, 9 Apr 2017 17:06:21 -0700, Aaron Jensen <aaronjensen <at> gmail.com> said:
>
>> For me, this slows down call-process in TTY emacs by 3ms (from
>> 2.5ms->5.5ms). I typically launch a GUI emacs and connect to the
>> server in TTY via emacsclient, and in that scenario this patch does
>> not slow down call-process in the TTY, but it will affect those who
>> use TTY only, it seems.
>
> Then use "obsolete" ioctl TIOCNOTTY instead of setsid?  I'm not
> familiar with this matter, so could someone check if this is OK?  I
> confirmed that only the controlling terminal of the child process was
> detached.

Performance-wise this worked for me in both TTY and non-TTY. I can't
speak to this being an OK approach, however. Thank you!




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Mon, 10 Apr 2017 15:43:02 GMT) Full text and rfc822 format available.

Message #44 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Alan Third <alan <at> idiocy.org>
To: YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Cc: 26397 <at> debbugs.gnu.org, Alan Third <alan <at> idiocy.org>,
 Aaron Jensen <aaronjensen <at> gmail.com>
Subject: [PATCH v2] Use vfork if possible on Darwin (bug#26397)
Date: Mon, 10 Apr 2017 16:42:11 +0100
* src/conf_post.h (HAVE_WORKING_VFORK): Don't undef.
(vfork): Don't define.
* src/process.c (create_process) [DARWIN_OS]: Use fork if pty_flag is
set, otherwise vfork.
* src/callproc.c (call_process) [DARWIN_OS]: Use TIOCNOTTY to detach
the controlling terminal instead of setsid.
---
 src/callproc.c  | 13 +++++++++++++
 src/conf_post.h |  6 ------
 src/process.c   |  9 +++++++++
 3 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/callproc.c b/src/callproc.c
index 05048576ce..792556c8e0 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -52,6 +52,8 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #include "syswait.h"
 #include "blockinput.h"
 #include "frame.h"
+#include "systty.h"
+#include "keyboard.h"
 
 #ifdef MSDOS
 #include "msdos.h"
@@ -626,7 +628,18 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
     {
       unblock_child_signal (&oldset);
 
+#ifdef DARWIN_OS
+      /* Darwin doesn't let us run setsid after a vfork, so use
+         TIOCNOTTY when necessary. */
+      int j = emacs_open (DEV_TTY, O_RDWR, 0);
+      if (j >= 0)
+        {
+          ioctl (j, TIOCNOTTY, 0);
+          emacs_close (j);
+        }
+#else
       setsid ();
+#endif
 
       /* Emacs ignores SIGPIPE, but the child should not.  */
       signal (SIGPIPE, SIG_DFL);
diff --git a/src/conf_post.h b/src/conf_post.h
index 30c948e39a..95ebd5511c 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -99,12 +99,6 @@ typedef bool bool_bf;
 #define realloc unexec_realloc
 #define free unexec_free
 #endif
-/* The following solves the problem that Emacs hangs when evaluating
-   (make-comint "test0" "/nodir/nofile" nil "") when /nodir/nofile
-   does not exist.  Also, setsid is not allowed in the vfork child's
-   context as of Darwin 9/Mac OS X 10.5.  */
-#undef HAVE_WORKING_VFORK
-#define vfork fork
 #endif  /* DARWIN_OS */
 
 /* If HYBRID_MALLOC is defined (e.g., on Cygwin), emacs will use
diff --git a/src/process.c b/src/process.c
index 2f2e5c1b25..47a85f1c95 100644
--- a/src/process.c
+++ b/src/process.c
@@ -2049,7 +2049,16 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
   int volatile forkerr_volatile = forkerr;
   struct Lisp_Process *p_volatile = p;
 
+#ifdef DARWIN_OS
+  /* Darwin doesn't let us run setsid after a vfork, so use fork when
+     necessary. */
+  if (pty_flag)
+    pid = fork ();
+  else
+    pid = vfork ();
+#else
   pid = vfork ();
+#endif
 
   current_dir = current_dir_volatile;
   lisp_pty_name = lisp_pty_name_volatile;
-- 

This patch includes everything so far.

I can’t say whether the TIOCNOTTY approach is correct either,
unfortunately.

Yamamoto‐san, I’m aware this is mostly your work, so if you’d prefer
I’m happy for you to commit it in your name.

-- 
Alan Third




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Tue, 11 Apr 2017 07:07:01 GMT) Full text and rfc822 format available.

Message #47 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
To: Alan Third <alan <at> idiocy.org>
Cc: 26397 <at> debbugs.gnu.org, Aaron Jensen <aaronjensen <at> gmail.com>,
 YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Subject: Re: [PATCH v2] Use vfork if possible on Darwin (bug#26397)
Date: Tue, 11 Apr 2017 16:06:31 +0900
>>>>> On Mon, 10 Apr 2017 16:42:11 +0100, Alan Third <alan <at> idiocy.org> said:

> I can’t say whether the TIOCNOTTY approach is correct either,
> unfortunately.

> Yamamoto‐san, I’m aware this is mostly your work, so if you’d prefer
> I’m happy for you to commit it in your name.

You've set up the commit message and the process.c part.  Please add
me as a co-author (as described in the CONTRIBUTE file) and commit it
if no one is against the TIOCNOTTY approach.

				     YAMAMOTO Mitsuharu
				mituharu <at> math.s.chiba-u.ac.jp




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Tue, 18 Apr 2017 02:31:01 GMT) Full text and rfc822 format available.

Message #50 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Aaron Jensen <aaronjensen <at> gmail.com>
To: Alan Third <alan <at> idiocy.org>
Cc: 26397 <at> debbugs.gnu.org, YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Subject: Re: [PATCH v2] Use vfork if possible on Darwin (bug#26397)
Date: Mon, 17 Apr 2017 19:29:56 -0700
On Mon, Apr 10, 2017 at 8:42 AM, Alan Third <alan <at> idiocy.org> wrote:
> This patch includes everything so far.

I've been using this patch all week and no hiccups from what I can
tell. I'm really enjoying the new found responsiveness in Magit.

Is this ready to apply?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#26397; Package emacs. (Tue, 18 Apr 2017 10:49:02 GMT) Full text and rfc822 format available.

Message #53 received at 26397 <at> debbugs.gnu.org (full text, mbox):

From: Alan Third <alan <at> idiocy.org>
To: Aaron Jensen <aaronjensen <at> gmail.com>
Cc: 26397 <at> debbugs.gnu.org, YAMAMOTO Mitsuharu <mituharu <at> math.s.chiba-u.ac.jp>
Subject: Re: [PATCH v2] Use vfork if possible on Darwin (bug#26397)
Date: Tue, 18 Apr 2017 11:48:35 +0100
On Mon, Apr 17, 2017 at 07:29:56PM -0700, Aaron Jensen wrote:
> On Mon, Apr 10, 2017 at 8:42 AM, Alan Third <alan <at> idiocy.org> wrote:
> > This patch includes everything so far.
> 
> I've been using this patch all week and no hiccups from what I can
> tell. I'm really enjoying the new found responsiveness in Magit.
> 
> Is this ready to apply?

I’ve been using it with no problems either, and nobody’s complained
about it, so I’ve just pushed it to master.

Thanks!
-- 
Alan Third




Added tag(s) fixed. Request was from Alan Third <alan <at> idiocy.org> to control <at> debbugs.gnu.org. (Tue, 18 Apr 2017 10:50:01 GMT) Full text and rfc822 format available.

bug marked as fixed in version 26.1, send any further explanations to 26397 <at> debbugs.gnu.org and Aaron Jensen <aaronjensen <at> gmail.com> Request was from Alan Third <alan <at> idiocy.org> to control <at> debbugs.gnu.org. (Tue, 18 Apr 2017 10:50:01 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 16 May 2017 11:24:05 GMT) Full text and rfc822 format available.

bug unarchived. Request was from Aaron Jensen <aaronjensen <at> gmail.com> to control <at> debbugs.gnu.org. (Mon, 08 Nov 2021 02:25:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 06 Dec 2021 12:24:14 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 113 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.