projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
BSD 4_4_Lite2 release
[unix-history]
/
usr
/
src
/
bin
/
csh
/
proc.c
diff --git
a/usr/src/bin/csh/proc.c
b/usr/src/bin/csh/proc.c
index
8a85fdc
..
6bba00a
100644
(file)
--- a/
usr/src/bin/csh/proc.c
+++ b/
usr/src/bin/csh/proc.c
@@
-32,7
+32,7
@@
*/
#ifndef lint
*/
#ifndef lint
-static char sccsid[] = "@(#)proc.c 8.
1 (Berkeley) 5/31/93
";
+static char sccsid[] = "@(#)proc.c 8.
2 (Berkeley) 3/22/95
";
#endif /* not lint */
#include <sys/types.h>
#endif /* not lint */
#include <sys/types.h>
@@
-201,17
+201,19
@@
pnote()
{
register struct process *pp;
int flags;
{
register struct process *pp;
int flags;
- sigset_t
omask
;
+ sigset_t
sigset, osigset
;
neednote = 0;
neednote = 0;
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGCHLD);
for (pp = proclist.p_next; pp != NULL; pp = pp->p_next) {
if (pp->p_flags & PNEEDNOTE) {
for (pp = proclist.p_next; pp != NULL; pp = pp->p_next) {
if (pp->p_flags & PNEEDNOTE) {
-
omask = sigblock(sigmask(SIGCHLD)
);
+
sigprocmask(SIG_BLOCK, &sigset, &osigset
);
pp->p_flags &= ~PNEEDNOTE;
flags = pprint(pp, NUMBER | NAME | REASON);
if ((flags & (PRUNNING | PSTOPPED)) == 0)
pflush(pp);
pp->p_flags &= ~PNEEDNOTE;
flags = pprint(pp, NUMBER | NAME | REASON);
if ((flags & (PRUNNING | PSTOPPED)) == 0)
pflush(pp);
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_SETMASK, &osigset, NULL
);
}
}
}
}
}
}
@@
-224,12
+226,14
@@
void
pwait()
{
register struct process *fp, *pp;
pwait()
{
register struct process *fp, *pp;
- sigset_t
omask
;
+ sigset_t
sigset, osigset
;
/*
* Here's where dead procs get flushed.
*/
/*
* Here's where dead procs get flushed.
*/
- omask = sigblock(sigmask(SIGCHLD));
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigset, &osigset);
for (pp = (fp = &proclist)->p_next; pp != NULL; pp = (fp = pp)->p_next)
if (pp->p_pid == 0) {
fp->p_next = pp->p_next;
for (pp = (fp = &proclist)->p_next; pp != NULL; pp = (fp = pp)->p_next)
if (pp->p_pid == 0) {
fp->p_next = pp->p_next;
@@
-240,7
+244,7
@@
pwait()
xfree((ptr_t) pp);
pp = fp;
}
xfree((ptr_t) pp);
pp = fp;
}
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_SETMASK, &osigset, NULL
);
pjwait(pcurrjob);
}
pjwait(pcurrjob);
}
@@
-255,7
+259,7
@@
pjwait(pp)
{
register struct process *fp;
int jobflags, reason;
{
register struct process *fp;
int jobflags, reason;
- sigset_t
omask
;
+ sigset_t
sigset, osigset
;
while (pp->p_pid != pp->p_jobid)
pp = pp->p_friends;
while (pp->p_pid != pp->p_jobid)
pp = pp->p_friends;
@@
-270,9
+274,13
@@
pjwait(pp)
* target process, or any of its friends, are running
*/
fp = pp;
* target process, or any of its friends, are running
*/
fp = pp;
- omask = sigblock(sigmask(SIGCHLD));
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigset, &osigset);
for (;;) {
for (;;) {
- (void) sigblock(sigmask(SIGCHLD));
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigset, NULL);
jobflags = 0;
do
jobflags |= fp->p_flags;
jobflags = 0;
do
jobflags |= fp->p_flags;
@@
-280,12
+288,14
@@
pjwait(pp)
if ((jobflags & PRUNNING) == 0)
break;
#ifdef JOBDEBUG
if ((jobflags & PRUNNING) == 0)
break;
#ifdef JOBDEBUG
- (void) fprintf(csherr, "starting to sig
pause
for SIGCHLD on %d\n",
+ (void) fprintf(csherr, "starting to sig
suspend
for SIGCHLD on %d\n",
fp->p_pid);
#endif /* JOBDEBUG */
fp->p_pid);
#endif /* JOBDEBUG */
- (void) sigpause(omask & ~sigmask(SIGCHLD));
+ sigset = osigset;
+ sigdelset(&sigset, SIGCHLD);
+ sigsuspend(&sigset);
}
}
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_SETMASK, &osigset, NULL
);
if (tpgrp > 0) /* get tty back */
(void) tcsetpgrp(FSHTTY, tpgrp);
if ((jobflags & (PSIGNALED | PSTOPPED | PTIME)) ||
if (tpgrp > 0) /* get tty back */
(void) tcsetpgrp(FSHTTY, tpgrp);
if ((jobflags & (PSIGNALED | PSTOPPED | PTIME)) ||
@@
-344,18
+354,21
@@
dowait(v, t)
struct command *t;
{
register struct process *pp;
struct command *t;
{
register struct process *pp;
- sigset_t
omask
;
+ sigset_t
sigset, osigset
;
pjobs++;
pjobs++;
- omask = sigblock(sigmask(SIGCHLD));
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigset, &osigset);
loop:
for (pp = proclist.p_next; pp; pp = pp->p_next)
if (pp->p_pid && /* pp->p_pid == pp->p_jobid && */
pp->p_flags & PRUNNING) {
loop:
for (pp = proclist.p_next; pp; pp = pp->p_next)
if (pp->p_pid && /* pp->p_pid == pp->p_jobid && */
pp->p_flags & PRUNNING) {
- (void) sigpause((sigset_t) 0);
+ sigemptyset(&sigset);
+ sigsuspend(&sigset);
goto loop;
}
goto loop;
}
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_SETMASK, &osigset, NULL
);
pjobs = 0;
}
pjobs = 0;
}
@@
-999,13
+1012,14
@@
pkill(v, signum)
register struct process *pp, *np;
register int jobflags = 0;
int pid, err1 = 0;
register struct process *pp, *np;
register int jobflags = 0;
int pid, err1 = 0;
- sigset_t
omask
;
+ sigset_t
sigset
;
Char *cp;
Char *cp;
- omask = sigmask(SIGCHLD);
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGCHLD);
if (setintr)
if (setintr)
-
omask |= sigmask(
SIGINT);
-
omask = sigblock(omask) & ~omask
;
+
sigaddset(&sigset,
SIGINT);
+
sigprocmask(SIG_BLOCK, &sigset, NULL)
;
gflag = 0, tglob(v);
if (gflag) {
v = globall(v);
gflag = 0, tglob(v);
if (gflag) {
v = globall(v);
@@
-1069,7
+1083,7
@@
cont:
}
if (gargv)
blkfree(gargv), gargv = 0;
}
if (gargv)
blkfree(gargv), gargv = 0;
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_UNBLOCK, &sigset, NULL
);
if (err1)
stderror(ERR_SILENT);
}
if (err1)
stderror(ERR_SILENT);
}
@@
-1083,10
+1097,12
@@
pstart(pp, foregnd)
int foregnd;
{
register struct process *np;
int foregnd;
{
register struct process *np;
- sigset_t
omask
;
+ sigset_t
sigset, osigset
;
long jobflags = 0;
long jobflags = 0;
- omask = sigblock(sigmask(SIGCHLD));
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigset, &osigset);
np = pp;
do {
jobflags |= np->p_flags;
np = pp;
do {
jobflags |= np->p_flags;
@@
-1106,7
+1122,7
@@
pstart(pp, foregnd)
(void) tcsetpgrp(FSHTTY, pp->p_jobid);
if (jobflags & PSTOPPED)
(void) killpg((pid_t) pp->p_jobid, SIGCONT);
(void) tcsetpgrp(FSHTTY, pp->p_jobid);
if (jobflags & PSTOPPED)
(void) killpg((pid_t) pp->p_jobid, SIGCONT);
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_SETMASK, &osigset, NULL
);
}
void
}
void
@@
-1229,7
+1245,7
@@
pfork(t, wanttty)
register int pid;
bool ignint = 0;
int pgrp;
register int pid;
bool ignint = 0;
int pgrp;
- sigset_t
omask
;
+ sigset_t
sigset, osigset
;
/*
* A child will be uninterruptible only under very special conditions.
/*
* A child will be uninterruptible only under very special conditions.
@@
-1250,12
+1266,14
@@
pfork(t, wanttty)
/*
* Hold SIGCHLD until we have the process installed in our table.
*/
/*
* Hold SIGCHLD until we have the process installed in our table.
*/
- omask = sigblock(sigmask(SIGCHLD));
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigset, &osigset);
while ((pid = fork()) < 0)
if (setintr == 0)
(void) sleep(FORKSLEEP);
else {
while ((pid = fork()) < 0)
if (setintr == 0)
(void) sleep(FORKSLEEP);
else {
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_SETMASK, &osigset, NULL
);
stderror(ERR_NOPROC);
}
if (pid == 0) {
stderror(ERR_NOPROC);
}
if (pid == 0) {
@@
-1299,7
+1317,7
@@
pfork(t, wanttty)
if (wanttty >= 0)
(void) setpgid(pid, pcurrjob ? pcurrjob->p_jobid : pid);
palloc(pid, t);
if (wanttty >= 0)
(void) setpgid(pid, pcurrjob ? pcurrjob->p_jobid : pid);
palloc(pid, t);
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_SETMASK, &osigset, NULL
);
}
return (pid);
}
return (pid);
@@
-1326,14
+1344,19
@@
void
pgetty(wanttty, pgrp)
int wanttty, pgrp;
{
pgetty(wanttty, pgrp)
int wanttty, pgrp;
{
- sigset_t
omask = 0
;
+ sigset_t
sigset, osigset
;
/*
* christos: I am blocking the tty signals till I've set things
* correctly....
*/
/*
* christos: I am blocking the tty signals till I've set things
* correctly....
*/
- if (wanttty > 0)
- omask = sigblock(sigmask(SIGTSTP)|sigmask(SIGTTIN)|sigmask(SIGTTOU));
+ if (wanttty > 0) {
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGTSTP);
+ sigaddset(&sigset, SIGTTIN);
+ sigaddset(&sigset, SIGTTOU);
+ sigprocmask(SIG_BLOCK, &sigset, &osigset);
+ }
/*
* From: Michael Schroeder <mlschroe@immd4.informatik.uni-erlangen.de>
* Don't check for tpgrp >= 0 so even non-interactive shells give
/*
* From: Michael Schroeder <mlschroe@immd4.informatik.uni-erlangen.de>
* Don't check for tpgrp >= 0 so even non-interactive shells give
@@
-1348,7
+1371,7
@@
pgetty(wanttty, pgrp)
if (wanttty > 0) {
(void) tcsetpgrp(FSHTTY, pgrp);
if (wanttty > 0) {
(void) tcsetpgrp(FSHTTY, pgrp);
-
(void) sigsetmask(omask
);
+
sigprocmask(SIG_SETMASK, &osigset, NULL
);
}
if (tpgrp > 0)
}
if (tpgrp > 0)