mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	Revert "Backport atomic job locking from ksh 93v- beta" (52067c3d)
				
					
				
			That patch broke the build on Cygwin, where gcc apparently doesn't
have the required atomic addition/subtraction compiler builtins.
The build fails at link time with those functions not found.
As far as I know, ksh was actually working fine (after @JohnoKing's
gcc workaround in c258a04f), so I'll just revert this for now. If a
need for it is demonstrated later, we'll have to add a feature test
or find some other way to get it working on Cygwin.
			
			
This commit is contained in:
		
							parent
							
								
									82c6922330
								
							
						
					
					
						commit
						595a0a5684
					
				
					 2 changed files with 15 additions and 7 deletions
				
			
		| 
						 | 
					@ -33,7 +33,6 @@
 | 
				
			||||||
#   include	<signal.h>
 | 
					#   include	<signal.h>
 | 
				
			||||||
#endif /* !SIGINT */
 | 
					#endif /* !SIGINT */
 | 
				
			||||||
#include	"FEATURE/options"
 | 
					#include	"FEATURE/options"
 | 
				
			||||||
#include	<aso.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef JOBS
 | 
					#undef JOBS
 | 
				
			||||||
#if defined(SIGCLD) && !defined(SIGCHLD)
 | 
					#if defined(SIGCLD) && !defined(SIGCHLD)
 | 
				
			||||||
| 
						 | 
					@ -126,13 +125,16 @@ extern struct jobs job;
 | 
				
			||||||
#define vmbusy()	0
 | 
					#define vmbusy()	0
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define job_lock()	asoincint(&job.in_critical)
 | 
					#define job_lock()	(job.in_critical++)
 | 
				
			||||||
#define job_unlock()	\
 | 
					#define job_unlock()	\
 | 
				
			||||||
	do { \
 | 
						do { \
 | 
				
			||||||
		int	_sig; \
 | 
							int	sig; \
 | 
				
			||||||
		if (asogetint(&job.in_critical) == 1 && (_sig = job.savesig) && !vmbusy()) \
 | 
							if (!--job.in_critical && (sig = job.savesig)) \
 | 
				
			||||||
		    job_reap(_sig); \
 | 
							{ \
 | 
				
			||||||
		asodecint(&job.in_critical); \
 | 
								if (!job.in_critical++ && !vmbusy()) \
 | 
				
			||||||
 | 
									job_reap(sig); \
 | 
				
			||||||
 | 
								job.in_critical--; \
 | 
				
			||||||
 | 
							} \
 | 
				
			||||||
	} while(0)
 | 
						} while(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern const char	e_jobusage[];
 | 
					extern const char	e_jobusage[];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1891,8 +1891,14 @@ again:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void *job_subsave(void)
 | 
					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();
 | 
						job_lock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct back_save *bp = new_of(struct back_save,0);
 | 
				
			||||||
	*bp = bck;
 | 
						*bp = bck;
 | 
				
			||||||
	bp->prev = bck.prev;
 | 
						bp->prev = bck.prev;
 | 
				
			||||||
	bck.count = 0;
 | 
						bck.count = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue