From: Ioannis Kappas <ioannis.kappas@gmail.com>
To: 46284@debbugs.gnu.org
Subject: bug#46284: 27.1; emacs-27: windows-nt regression with process sentinel's change description argument
Date: Wed, 3 Feb 2021 22:50:54 +0000 [thread overview]
Message-ID: <CAMRHuGB9j3ZT9oW=0T17+RyVBHa5F8LqWSOYkx=kV5LibF+iAg@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 2849 bytes --]
There appears to be a bug in emacs-27 on windows-nt when a call is
made to a process' sentinel in response to a kill- or
interrupt-process call.
The second argument to the sentinel (the "string describing the
change") is set to a "unknown signal" rather than to "interrupt\n" as
it was the case in the latest emacs-26 or in emacs-28 branches:
| system-version | second argument passed to the sentinel |
|----------------+----------------------------------------|
| 26.3.50 | interrupted\n |
| 27.1.91 | unknown signal\n |
| 28.0.50 | interrupted\n |
The expectation is that, under windows-nt, the process sentinel should
pass in an "interrupted\n" value to the change description
argument when interrupt-process has successfully interrupted a process.
An ert test is included to showcase the issue that only fails in
emacs-27 on windows-nt. The test starts an idle emacs process,
sets-process-sentinel,
calls interrupt-process on it, and then compares the sentinel's second
argument whether it is the de facto expected "interrupted\n" text or
otherwise. The test fails on the latest emasc-27 since the argument that
emacs is passing in is "unknown signal".
To execute, save the test file and execute the following command:
emacs.exe -batch -l ert -l set-process-sentinel-test.el -f
ert-run-tests-batch-and-exit
The test will fail on emacs-27 but passes as expected in emacs-26 or the
master branch.
Initial analysis indicated this could be an emacs-27 regression caused by
the move to pdumper,
affecting any functionality that converts signal numbers to text
description. Analysis to follow.
---
set-process-sentinel is a built-in function in ‘src/process.c’.
(set-process-sentinel PROCESS SENTINEL)
Give PROCESS the sentinel SENTINEL; nil for default.
The sentinel is called as a function when the process changes state.
It gets two arguments: the process, and a string describing the change.
In GNU Emacs 27.1 (build 1, x86_64-w64-mingw32)
of 2020-11-19 built on fv-az68-340
Repository revision: ec297125a76481c55390d0b329e541907879d6f3
Repository branch: master
Windowing system distributor 'Microsoft Corp.', version 10.0
Configured using:
'configure --prefix=/mingw64 --build=x86_64-w64-mingw32 --with-modules
--without-dbus --without-compress-install 'CFLAGS=-march=x86-64
-mtune=generic -O2 -pipe' CPPFLAGS=-D__USE_MINGW_ANSI_STDIO=1
'LDFLAGS=-pipe
-Wl,--dynamicbase,--high-entropy-va,--nxcompat,--default-image-base-high''
Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY W32NOTIFY ACL GNUTLS LIBXML2
HARFBUZZ ZLIB TOOLKIT_SCROLL_BARS MODULES THREADS JSON PDUMPER GMP
Important settings:
value of $LANG: ENG
locale-coding-system: cp1252
[-- Attachment #1.2: Type: text/html, Size: 5059 bytes --]
[-- Attachment #2: set-process-sentinel-test.el --]
[-- Type: application/octet-stream, Size: 1383 bytes --]
;;; -*- lexical-binding: t; -*-
(require 'ert)
(ert-deftest process-sentinel-interrupt-event ()
"Test that interrupting a process under windows sends the
\"interrupt\" event to the process sentinel. "
:expected-result (if (eq 'windows-nt system-type)
:passed
:failed)
(message ":system %s :version %s" system-configuration emacs-version)
(with-temp-buffer
(let* ((proc-buf (current-buffer))
;; start a new emacs process to wait idlesly to be
;; interrupted
(cmd "emacs -Q --batch --eval=\"(sit-for 50000)\"")
(proc (start-file-process-shell-command
"test/process-sentinel-signal-event" proc-buf cmd))
(events '()))
;; capture any incoming events
(set-process-sentinel proc (lambda (proc event)
(push event events)
))
;; wait for the process to start
(sleep-for 2)
(should (equal 'run (process-status proc)))
;; interrupt process and wait to die
(interrupt-process proc)
(sleep-for 2)
;; should have received SIGINT
(should (equal 'signal (process-status proc)))
(should (equal 2 (process-exit-status proc)))
;; and the change description should be "interrupt"
(should (equal '("interrupt\n") events))
(message "events %s" events)
)))
next reply other threads:[~2021-02-03 22:50 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-03 22:50 Ioannis Kappas [this message]
2021-02-04 7:36 ` bug#46284: 27.1; emacs-27: windows-nt regression with process sentinel's change description argument Previous Next Ioannis Kappas
2021-02-04 16:18 ` Eli Zaretskii
2021-02-04 18:12 ` Ioannis Kappas
2021-02-04 18:22 ` Eli Zaretskii
2021-04-21 3:04 ` bug#46284: 27.1; emacs-27: windows-nt regression with process sentinel's change description argument Stefan Kangas
2021-04-21 8:52 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAMRHuGB9j3ZT9oW=0T17+RyVBHa5F8LqWSOYkx=kV5LibF+iAg@mail.gmail.com' \
--to=ioannis.kappas@gmail.com \
--cc=46284@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).