Subject: bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1

From: Duncan Greatwood <[email-masked]>
Date: Mon, 28 Dec 2020 17:10:58 -0800

Using tramp, I had a remote cpp file open in a window.

I pressed "C-c c", which invokes a function in my .emacs called
compile-hereish, which (in this case) invokes the compile command with
the remote directory containing the remote cpp.

Compilation begins as expected.

The cpp file contains a number of syntax errors. There is what I understand
to be a longstanding Tramp bug such that, if a lot of outputs (syntax
errors) are sent at high speed to the compile window, Tramp hangs.

In emacs 26.2, Ctrl-G (usually ctrl-g three times) would interrupt the hung
Tramp window, and indeed cause the errors to be displayed in the window as
best as Tramp is able.

In emacs 27.1, Ctrl-G does nothing in this "tramp-hung-while-compiling"
situation. I also tried ctrl-c ctrl-c, but that also does nothing. It
appears that the only way to kill the hung Tramp compile is to force-quit
emacs as a whole at the OS level.

Machine running emacs: MacBook Pro (2015), macos Big Sur v11.1. I am using
emacs 27.1 installed via brew-cask on macos.
On the Macbook: ssh -V
    OpenSSH_8.1p1, LibreSSL 2.7.3

Remote host for compile: Ubuntu Linux 20.04.1 LTS (GNU/Linux
5.4.0-54-generic x86_64)
On remote host: ssh -V
  OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f  31 Mar 2020
Also on remote host: gcc --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

If I revert back to emacs 26.2 on the Macbook, ctrl-G once again works as
expected in the event of a Tramp hang.

I am attaching to the remote host using Tramp-ssh mode, but I also tried
Tramp-scp and saw the same behaviour. My .emacs includes:
(setq tramp-default-method "ssh")
(setq tramp-chunksize 500)

The following cpp file (on Ubuntu machine) is sufficient to generate a
large number of syntax errors and hang Tramp, blocking ctrl-G (crashing
emacs) in emacs 27.1 for me.
// test.cpp
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
int validstuff();
int validstuff()
{
    return(0);
}
// end test.cpp

Thanks as always.
D.

Following was generated via: M-x report-emacs-bug

In GNU Emacs 27.1 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60
Version 10.14.6 (Build 18G95))
 of 2020-08-11 built on builder10-14.porkrind.org
Windowing system distributor 'Apple', version 10.3.2022
System Description:  macOS 11.1

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Package cl is deprecated
Mark set

Configured using:
 'configure --with-ns '--enable-locallisppath=/Library/Application
 Support/Emacs/${version}/site-lisp:/Library/Application
 Support/Emacs/site-lisp' --with-modules'

Configured features:
NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES
THREADS JSON PDUMPER

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

Major mode: Fundamental

Minor modes in effect:
  global-undo-tree-mode: t
  undo-tree-mode: t
  global-auto-complete-mode: t
  show-paren-mode: t
  delete-selection-mode: t
  tooltip-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
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/Users/dgreatwood/.emacs.d/lisp/linum hides
/Applications/Emacs.app/Contents/Resources/lisp/linum

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg
epg-config gnus-util rmail rmail-loaddefs text-property-search seq
byte-opt bytecomp byte-compile cconv mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils linum easy-mmode
time-date subr-x server persistent-todo special-scratch tango-theme
advice undo-tree diff auto-complete-config auto-complete popup
string-inflection paren desktop frameset unbound cl-macs cl gv delsel
edmacro kmacro cl-loaddefs cl-lib tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core term/tty-colors frame minibuffer 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
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 threads kqueue cocoa ns
multi-tty make-network-process emacs)

Memory information:
((conses 16 70462 8546)
 (symbols 48 8556 1)
 (strings 32 22334 1877)
 (string-bytes 1 713421)
 (vectors 16 12259)
 (vector-slots 8 156248 17226)
 (floats 8 39 36)
 (intervals 56 248 0)
 (buffers 1000 14))