summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko2007-04-28 22:39:02 +0000
committerDenis Vlasenko2007-04-28 22:39:02 +0000
commit08c8c1d3b33de1156d8a7030ba2797276b8ff351 (patch)
treec386a79f3a9347cbba9b224357801e69ab1b9e4d
parente3f2f8989139f00e94473882366bd665d4fcc800 (diff)
downloadbusybox-08c8c1d3b33de1156d8a7030ba2797276b8ff351.zip
busybox-08c8c1d3b33de1156d8a7030ba2797276b8ff351.tar.gz
ash: fix infinite loop on exit if tty is not there anymore
-rw-r--r--shell/README5
-rw-r--r--shell/ash.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/shell/README b/shell/README
index 2b1d05c..40447ca 100644
--- a/shell/README
+++ b/shell/README
@@ -1,5 +1,10 @@
Various bits of what is known about busybox shells, in no particular order.
+2007-04-28
+hush: Ctrl-C and Ctrl-Z for single NOFORK commands are working.
+Memory and other resource leaks (opendir) are not addressed
+(testcase is "rm -i" interrupted by ctrl-c).
+
2007-04-21
hush: "sleep 5 | sleep 6" + Ctrl-Z + fg seems to work.
"rm -i" + Ctrl-C, "sleep 5" + Ctrl-Z still doesn't work
diff --git a/shell/ash.c b/shell/ash.c
index 90936fc..16818cf 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -3501,7 +3501,9 @@ setjobctl(int on)
/* turning job control off */
fd = ttyfd;
pgrp = initialpgrp;
- xtcsetpgrp(fd, pgrp);
+ /* was xtcsetpgrp, but this can make exiting ash
+ * with pty already deleted loop forever */
+ tcsetpgrp(fd, pgrp);
setpgid(0, pgrp);
setsignal(SIGTSTP);
setsignal(SIGTTOU);