mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
rm redundant getpid(2) syscalls (re: 9de65210)
Now that we have ${.sh.pid} a.k.a. shgd->current_pid, which is
updated using getpid() whenever forking a new process, there is no
need for anything else to ever call getpid(); we can use the stored
value instead. There were a lot of these syscalls kicking around,
some of them in performance-sensitive places.
The following lists only changes *other* than changing getpid() to
shgd->currentpid.
src/cmd/ksh93/include/defs.h:
- Comments: clarify what shgd->{pid,ppid,current_pid} are for.
src/cmd/ksh93/sh/main.c,
src/cmd/ksh93/sh/init.c:
- On reinit for a new script, update shgd->{pid,ppid,current_pid}
in the sh_reinit() function itself instead of calling sh_reinit()
from sh_main() and then updating those immediately after that
call. It just makes more sense this way. Nothing else ever calls
sh_reinit() so there are no side effects.
src/cmd/ksh93/sh/xec.c: _sh_fork():
- Update shgd->current_pid in the child early, so that the rest of
the function can use it instead of calling getpid() again.
- Remove reassignment of SH_PIDNOD->nvalue.lp value pointer to
shgd->current_pid (which makes ${.sh.pid} work in the shell).
It's constant and was already set on init.
This commit is contained in:
parent
ce68e1be37
commit
843b546c1a
13 changed files with 43 additions and 44 deletions
|
|
@ -791,7 +791,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_t *t, volatile int flags, int comsub)
|
|||
sp->prev->sig = sp->sig;
|
||||
else
|
||||
{
|
||||
kill(getpid(),sp->sig);
|
||||
kill(shgd->current_pid,sp->sig);
|
||||
sh_chktrap(shp);
|
||||
}
|
||||
}
|
||||
|
|
@ -800,7 +800,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_t *t, volatile int flags, int comsub)
|
|||
nsig = shp->savesig;
|
||||
shp->savesig = 0;
|
||||
if(nsig>0)
|
||||
kill(getpid(),nsig);
|
||||
kill(shgd->current_pid,nsig);
|
||||
if(sp->subpid)
|
||||
{
|
||||
job_wait(sp->subpid);
|
||||
|
|
@ -816,7 +816,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_t *t, volatile int flags, int comsub)
|
|||
{
|
||||
int sig = shp->exitval&SH_EXITMASK;
|
||||
if(sig==SIGINT || sig== SIGQUIT)
|
||||
kill(getpid(),sig);
|
||||
kill(shgd->current_pid,sig);
|
||||
}
|
||||
if(duped)
|
||||
{
|
||||
|
|
@ -825,9 +825,9 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_t *t, volatile int flags, int comsub)
|
|||
errormsg(SH_DICT,ERROR_system(1),e_redirect);
|
||||
}
|
||||
if(shp->ignsig)
|
||||
kill(getpid(),shp->ignsig);
|
||||
kill(shgd->current_pid,shp->ignsig);
|
||||
if(jmpval==SH_JMPSUB && shp->lastsig)
|
||||
kill(getpid(),shp->lastsig);
|
||||
kill(shgd->current_pid,shp->lastsig);
|
||||
if(jmpval && shp->toomany)
|
||||
siglongjmp(*shp->jmplist,jmpval);
|
||||
return(iop);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue