aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKaroly Lorentey2004-02-08 15:44:33 +0000
committerKaroly Lorentey2004-02-08 15:44:33 +0000
commit4edd8a5c9030d748c33242e39ac42d4df72a8525 (patch)
tree7c05f0bda4d58f71c73c5ae824a5b42c36da3a81 /src
parentd743c8f1dbb655051f49f72c3d37484df5a2bea8 (diff)
downloademacs-4edd8a5c9030d748c33242e39ac42d4df72a8525.tar.gz
emacs-4edd8a5c9030d748c33242e39ac42d4df72a8525.zip
Don't hang on the tty if called from a shell script.
src/sysdep.c (narrow_foreground_group): Set the process group to inherited_pgroup before calling EMACS_SET_TTY_PGRP. Removed confusing inherited_pgroup initialization (it is done in emacs.c). (Reported by Istvan Marko <mi-mtty at kismala dot com>.) git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-75
Diffstat (limited to 'src')
-rw-r--r--src/sysdep.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/sysdep.c b/src/sysdep.c
index 2b7a029b5ba..73b7fb70a99 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1105,24 +1105,27 @@ unrequest_sigio ()
1105 the tty's pgroup just like any other terminal setting. If 1105 the tty's pgroup just like any other terminal setting. If
1106 inherited_group was not the tty's pgroup, then we'll get a 1106 inherited_group was not the tty's pgroup, then we'll get a
1107 SIGTTmumble when we try to change the tty's pgroup, and a CONT if 1107 SIGTTmumble when we try to change the tty's pgroup, and a CONT if
1108 it goes foreground in the future, which is what should happen. */ 1108 it goes foreground in the future, which is what should happen.
1109
1110 This variable is initialized in emacs.c. */
1109int inherited_pgroup; 1111int inherited_pgroup;
1110 1112
1111/* Split off the foreground process group to Emacs alone. 1113/* Split off the foreground process group to Emacs alone. When we are
1112 When we are in the foreground, but not started in our own process 1114 in the foreground, but not started in our own process group,
1113 group, redirect the TTY to point to our own process group. We need 1115 redirect the tty device handle FD to point to our own process
1114 to be in our own process group to receive SIGIO properly. */ 1116 group. We need to be in our own process group to receive SIGIO
1117 properly. */
1115void 1118void
1116narrow_foreground_group (int fd) 1119narrow_foreground_group (int fd)
1117{ 1120{
1118 int me = getpid (); 1121 int me = getpid ();
1119 1122
1123 setpgrp (0, inherited_pgroup);
1120 if (! inherited_pgroup) 1124 if (! inherited_pgroup)
1121 inherited_pgroup = getpgid (0); 1125 abort (); /* Should not happen. */
1122 /* XXX This only works on the controlling tty. */
1123 if (inherited_pgroup != me) 1126 if (inherited_pgroup != me)
1124 EMACS_SET_TTY_PGRP (fd, &me); 1127 EMACS_SET_TTY_PGRP (fd, &me); /* XXX This only works on the controlling tty. */
1125 setpgid (0, me); 1128 setpgrp (0, me);
1126} 1129}
1127 1130
1128/* Set the tty to our original foreground group. */ 1131/* Set the tty to our original foreground group. */
@@ -1131,7 +1134,7 @@ widen_foreground_group (int fd)
1131{ 1134{
1132 if (inherited_pgroup != getpid ()) 1135 if (inherited_pgroup != getpid ())
1133 EMACS_SET_TTY_PGRP (fd, &inherited_pgroup); 1136 EMACS_SET_TTY_PGRP (fd, &inherited_pgroup);
1134 setpgid (0, inherited_pgroup); 1137 setpgrp (0, inherited_pgroup);
1135} 1138}
1136 1139
1137#endif /* BSD_PGRPS */ 1140#endif /* BSD_PGRPS */