unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
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)
      )))


             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).