components/ksh93/patches/CR7105086.patch
changeset 789 5f074ca23733
equal deleted inserted replaced
788:ab1a623335b6 789:5f074ca23733
       
     1 diff -r bb8978c251cb -r 6fbea5c30b60 usr/src/cmd/ast/lib/libshell/common/sh/jobs.c
       
     2 --- a/src/cmd/ksh93/sh/jobs.c	Sun Mar 25 23:19:46 2012 -0700
       
     3 +++ b/src/cmd/ksh93/sh/jobs.c	Mon Mar 26 05:09:19 2012 -0700
       
     4 @@ -28,6 +28,9 @@
       
     5   *  Rewritten April, 1988
       
     6   *  Revised January, 1992
       
     7   */
       
     8 +/*
       
     9 + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
       
    10 + */
       
    11  
       
    12  #include	"defs.h"
       
    13  #include	<wait.h>
       
    14 @@ -57,6 +60,7 @@
       
    15  {
       
    16  	struct jobsave	*next;
       
    17  	pid_t		pid;
       
    18 +	short		curenv;
       
    19  	unsigned short	exitval;
       
    20  };
       
    21  
       
    22 @@ -232,6 +236,7 @@
       
    23  		jp->pid = pid;
       
    24  		jp->next = bck.list;
       
    25  		bck.list = jp;
       
    26 +		jp->curenv = 0;
       
    27  		jp->exitval = 0;
       
    28  	}
       
    29  	return(jp);
       
    30 @@ -1790,6 +1795,7 @@
       
    31  			/* save status for future wait */
       
    32  			if(jp = jobsave_create(pw->p_pid))
       
    33  			{
       
    34 +				jp->curenv = pw->p_env;
       
    35  				jp->exitval = pw->p_exit;
       
    36  				if(pw->p_flag&P_SIGNALLED)
       
    37  					jp->exitval |= SH_EXITSIG;
       
    38 @@ -1967,7 +1973,7 @@
       
    39  	for(jp=bck.list; jp; jp=jpnext)
       
    40  	{
       
    41  		jpnext = jp->next;
       
    42 -		if(jp->pid==sh.spid)
       
    43 +		if(jp->curenv != sh.curenv || jp->pid==sh.spid)
       
    44  		{
       
    45  			jp->next = bp->list;
       
    46  			bp->list = jp;