bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#7225: 23.2.50; [PATCH] C-c C-c doesn't work in shell mode (Cygwin)


From: Ken Brown
Subject: bug#7225: 23.2.50; [PATCH] C-c C-c doesn't work in shell mode (Cygwin)
Date: Sat, 16 Oct 2010 08:44:28 -0400
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4

On 10/16/2010 3:32 AM, Eli Zaretskii wrote:
Date: Fri, 15 Oct 2010 19:36:36 -0400
From: Ken Brown<kbrown@cornell.edu>
Cc:

I think I can fix a longstanding bug in the Cygwin build of emacs, in
which C-c C-c doesn't work to interrupt a process in shell mode.  Since
the problem doesn't seem to be in the bug database, I'm reporting it
first for documentation purposes, and then I'll give the proposed fix.
To reproduce:

emacs -Q
M-x shell
cat
C-c C-c
(The cat process doesn't get killed.)

Is the reason for this known?  It looks like the `kill' syscall isn't
doing its job, but if that's so, there should be a good reason for
that.

The problem is the group id in the call to 'kill'. Cygwin doesn't define TIOCGPGRP, and the group id as set in line 6233 of process.c (emacs-23 branch) is the wrong group id.

The following patch seems to fix it:

=== modified file 'src/s/cygwin.h'
--- src/s/cygwin.h      2010-01-13 08:35:10 +0000
+++ src/s/cygwin.h      2010-10-15 22:20:39 +0000
@@ -132,6 +132,9 @@
      returns ENOSYS.  A workaround is to set G_SLICE=always-malloc. */
   #define G_SLICE_ALWAYS_MALLOC

+/* Send signals to subprocesses by "typing" special chars at them.  */
+#define SIGNALS_VIA_CHARACTERS
+
   /* the end */

   /* arch-tag: 5ae7ba00-83b0-4ab3-806a-3e845779191b

I'd like to apply this to the emacs-23 branch.  Does anyone see a
problem with it or anything further I should test?

Did you test it with a subprogram that puts its stdin into a mode
where (speaking in termios terms) the ISIG flag in c_lflag passed to
tcsetattr is unset?

I don't know how to do this.  Can you give me a short test program to try?

In any case, I wouldn't recommend to take this workaround unless we
understand why this doesn't work without it.

I'm not sure why you call it a workaround. The comments preceding (and in) the definition of process_send_signal make it clear that SIGNALS_VIA_CHARACTERS is the preferred method. It's used by GNU/Linux (see src/s/gnu-linux.h) and several other systems.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]