diff --git a/src/cmd/ksh93/sh/jobs.c b/src/cmd/ksh93/sh/jobs.c index 9b852b0e65c4..d9fcf1f2a971 100644 --- a/src/cmd/ksh93/sh/jobs.c +++ b/src/cmd/ksh93/sh/jobs.c @@ -1973,8 +1973,14 @@ static int job_chksave(register pid_t pid) void *job_subsave(void) { - struct back_save *bp = new_of(struct back_save,0); + /* + * We must make a lock first before doing anything else, + * otherwise GCC will remove the job locking mechanism + * as a result of compiler optimization. + */ job_lock(); + + struct back_save *bp = new_of(struct back_save,0); *bp = bck; bp->prev = bck.prev; bck.count = 0;