diff --git a/src/cmd/ksh93/Mamfile b/src/cmd/ksh93/Mamfile index f14205d3f..b5f682d45 100644 --- a/src/cmd/ksh93/Mamfile +++ b/src/cmd/ksh93/Mamfile @@ -377,6 +377,9 @@ make install make include/jobs.h implicit prev ${PACKAGE_ast_INCLUDE}/vmalloc.h implicit prev include/terminal.h implicit + make ${PACKAGE_ast_INCLUDE}/aso.h implicit + prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit + done ${PACKAGE_ast_INCLUDE}/aso.h implicit prev FEATURE/options implicit prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit prev ${PACKAGE_ast_INCLUDE}/ast.h implicit diff --git a/src/cmd/ksh93/include/jobs.h b/src/cmd/ksh93/include/jobs.h index b6e0713c4..0d03cb7f3 100644 --- a/src/cmd/ksh93/include/jobs.h +++ b/src/cmd/ksh93/include/jobs.h @@ -30,6 +30,7 @@ # include #endif /* !SIGINT */ #include "FEATURE/options" +#include #undef JOBS #if defined(SIGCLD) && !defined(SIGCHLD) @@ -120,16 +121,13 @@ extern struct jobs job; #define vmbusy() 0 #endif -#define job_lock() (job.in_critical++) +#define job_lock() asoincint(&job.in_critical) #define job_unlock() \ do { \ - int sig; \ - if (!--job.in_critical && (sig = job.savesig)) \ - { \ - if (!job.in_critical++ && !vmbusy()) \ - job_reap(sig); \ - job.in_critical--; \ - } \ + int _sig; \ + if (asogetint(&job.in_critical) == 1 && (_sig = job.savesig) && !vmbusy()) \ + job_reap(_sig); \ + asodecint(&job.in_critical); \ } while(0) extern const char e_jobusage[]; diff --git a/src/cmd/ksh93/include/version.h b/src/cmd/ksh93/include/version.h index b4fc81296..72b8c16e2 100644 --- a/src/cmd/ksh93/include/version.h +++ b/src/cmd/ksh93/include/version.h @@ -17,7 +17,7 @@ #include #define SH_RELEASE_FORK "93u+m" /* only change if you develop a new ksh93 fork */ -#define SH_RELEASE_SVER "1.0.0-rc.5" /* semantic version number: https://semver.org */ +#define SH_RELEASE_SVER "1.0.0-rc.6" /* semantic version number: https://semver.org */ #define SH_RELEASE_DATE "2022-07-31" /* must be in this format for $((.sh.version)) */ #define SH_RELEASE_CPYR "(c) 2020-2022 Contributors to ksh " SH_RELEASE_FORK diff --git a/src/cmd/ksh93/sh/jobs.c b/src/cmd/ksh93/sh/jobs.c index dd0af5f45..f923e661c 100644 --- a/src/cmd/ksh93/sh/jobs.c +++ b/src/cmd/ksh93/sh/jobs.c @@ -1878,14 +1878,8 @@ again: void *job_subsave(void) { - /* - * 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); + job_lock(); *bp = bck; bp->prev = bck.prev; bck.count = 0;