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
|
@ -1058,7 +1058,7 @@ static char *io_usename(char *name, int *perm, int fno, int mode)
|
|||
stakseek(0);
|
||||
}
|
||||
stakputc('.');
|
||||
sfprintf(stkstd,"%<#d_%d{;.tmp",getpid(),fno);
|
||||
sfprintf(stkstd,"%<#d_%d{;.tmp",shgd->current_pid,fno);
|
||||
tname = stakfreeze(1);
|
||||
switch(mode)
|
||||
{
|
||||
|
@ -1410,7 +1410,7 @@ int sh_redirect(Shell_t *shp,struct ionod *iop, int flag)
|
|||
}
|
||||
if(!np)
|
||||
{
|
||||
if(flag==0 || tname || (flag==1 && fn==1 && (shp->fdstatus[fn]&IONOSEEK) && shp->outpipepid && shp->outpipepid==getpid()))
|
||||
if(flag==0 || tname || (flag==1 && fn==1 && (shp->fdstatus[fn]&IONOSEEK) && shp->outpipepid == shgd->current_pid))
|
||||
{
|
||||
if(fd==fn)
|
||||
{
|
||||
|
@ -2170,7 +2170,7 @@ static void sftrack(Sfio_t* sp, int flag, void* data)
|
|||
#ifdef DEBUG
|
||||
if(flag==SF_READ || flag==SF_WRITE)
|
||||
{
|
||||
char *z = fmtbase((long)getpid(),0,0);
|
||||
char *z = fmtbase((long)shgd->current_pid,0,0);
|
||||
write(ERRIO,z,strlen(z));
|
||||
write(ERRIO,": ",2);
|
||||
write(ERRIO,"attempt to ",11);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue