--- a/src/cmd/ksh93/sh/jobs.c	2011-04-22 16:12:49.647816428 +0530
+++ b/src/cmd/ksh93/sh/jobs.c	2011-04-22 16:12:41.048816427 +0530
@@ -1965,20 +1965,18 @@
 	register struct jobsave *jp;
 	register struct back_save *bp = (struct back_save*)ptr;
 	register struct process *pw, *px, *pwnext;
-	struct jobsave *jpnext;
+	struct jobsave *end=NULL;
 	job_lock();
-	for(jp=bck.list; jp; jp=jpnext)
-	{
-		jpnext = jp->next;
-		if(jp->pid==sh.spid)
-		{
-			jp->next = bp->list;
-			bp->list = jp;
-			bp->count++;
-		}
-		else
-			job_chksave(jp->pid);
-	}
+	for(jp=bck.list; jp; jp=jp->next)
+		if (!jp->next)
+			end = jp;
+
+	if(end)
+		end->next = bp->list;
+	else
+		bck.list = bp->list;
+	bck.count += bp->count;
+
 	for(pw=job.pwlist; pw; pw=pwnext)
 	{
 		pwnext = pw->p_nxtjob;
@@ -1989,11 +1987,6 @@
 		job_unpost(pw,0);
 	}
 
-	/*
-	 * queue up old lists for disposal by job_reap()
-	 */
-
-	bck = *bp;
 	free((void*)bp);
 	job_unlock();
 }
