diff options
| -rwxr-xr-x | autograder/sdriver.pl (renamed from sdriver.pl) | 0 | ||||
| -rw-r--r-- | autograder/trace01.txt (renamed from trace01.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace02.txt (renamed from trace02.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace03.txt (renamed from trace03.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace04.txt (renamed from trace04.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace05.txt (renamed from trace05.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace06.txt (renamed from trace06.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace07.txt (renamed from trace07.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace08.txt (renamed from trace08.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace09.txt (renamed from trace09.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace10.txt (renamed from trace10.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace11.txt (renamed from trace11.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace12.txt (renamed from trace12.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace13.txt (renamed from trace13.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace14.txt (renamed from trace14.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace15.txt (renamed from trace15.txt) | 0 | ||||
| -rw-r--r-- | autograder/trace16.txt (renamed from trace16.txt) | 0 | ||||
| -rw-r--r-- | tsh.cc | 10 |
18 files changed, 8 insertions, 2 deletions
diff --git a/sdriver.pl b/autograder/sdriver.pl index 852bf3d..852bf3d 100755 --- a/sdriver.pl +++ b/autograder/sdriver.pl diff --git a/trace01.txt b/autograder/trace01.txt index 9c8561e..9c8561e 100644 --- a/trace01.txt +++ b/autograder/trace01.txt diff --git a/trace02.txt b/autograder/trace02.txt index e97643b..e97643b 100644 --- a/trace02.txt +++ b/autograder/trace02.txt diff --git a/trace03.txt b/autograder/trace03.txt index be8869c..be8869c 100644 --- a/trace03.txt +++ b/autograder/trace03.txt diff --git a/trace04.txt b/autograder/trace04.txt index 554df0e..554df0e 100644 --- a/trace04.txt +++ b/autograder/trace04.txt diff --git a/trace05.txt b/autograder/trace05.txt index 03c1876..03c1876 100644 --- a/trace05.txt +++ b/autograder/trace05.txt diff --git a/trace06.txt b/autograder/trace06.txt index bfa3890..bfa3890 100644 --- a/trace06.txt +++ b/autograder/trace06.txt diff --git a/trace07.txt b/autograder/trace07.txt index 259a285..259a285 100644 --- a/trace07.txt +++ b/autograder/trace07.txt diff --git a/trace08.txt b/autograder/trace08.txt index 49be19f..49be19f 100644 --- a/trace08.txt +++ b/autograder/trace08.txt diff --git a/trace09.txt b/autograder/trace09.txt index 340d998..340d998 100644 --- a/trace09.txt +++ b/autograder/trace09.txt diff --git a/trace10.txt b/autograder/trace10.txt index e7de996..e7de996 100644 --- a/trace10.txt +++ b/autograder/trace10.txt diff --git a/trace11.txt b/autograder/trace11.txt index d2f8663..d2f8663 100644 --- a/trace11.txt +++ b/autograder/trace11.txt diff --git a/trace12.txt b/autograder/trace12.txt index 88455e3..88455e3 100644 --- a/trace12.txt +++ b/autograder/trace12.txt diff --git a/trace13.txt b/autograder/trace13.txt index d734cbc..d734cbc 100644 --- a/trace13.txt +++ b/autograder/trace13.txt diff --git a/trace14.txt b/autograder/trace14.txt index 8086580..8086580 100644 --- a/trace14.txt +++ b/autograder/trace14.txt diff --git a/trace15.txt b/autograder/trace15.txt index 2cc780e..2cc780e 100644 --- a/trace15.txt +++ b/autograder/trace15.txt diff --git a/trace16.txt b/autograder/trace16.txt index 822ba14..822ba14 100644 --- a/trace16.txt +++ b/autograder/trace16.txt @@ -363,9 +363,15 @@ void do_bgfg(char **argv) { LOG << "fg" << endl; j->state = FG; + + sigset_t prev_with_sigchld_blocked = prev; + sigaddset(&prev_with_sigchld_blocked, SIGCHLD); + sigprocmask(SIG_SETMASK, &prev_with_sigchld_blocked, NULL); kill(-(j->pid), SIGCONT); - sigprocmask(SIG_SETMASK, &prev, NULL); + waitfg(j->pid); + + sigprocmask(SIG_SETMASK, &prev, NULL); } else // bg { LOG << "bg" << endl; @@ -388,7 +394,7 @@ void waitfg(pid_t pid) { sigset_t prev_with_sigchld_unblocked; // get current blocked signals - sigprocmask(0, NULL, &prev_with_sigchld_unblocked); + sigprocmask(0, nullptr, &prev_with_sigchld_unblocked); sigdelset(&prev_with_sigchld_unblocked, SIGCHLD); LOG << "waiting for pid "<< fgpid(jobs) << endl; while (fgpid(jobs) != 0) |
