about summary refs log tree commit diff
path: root/xe.c
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2017-11-02 13:55:24 +0100
committerLeah Neukirchen <leah@vuxu.org>2017-11-02 13:55:24 +0100
commitaed173459e4004022deae04619ab42edd5830d30 (patch)
tree7f11c7cfc06acf81f5caae5f1d3df01df7ecf1f9 /xe.c
parentde6272295d5ce3927edae7a0ed9599f3831e138f (diff)
downloadxe-aed173459e4004022deae04619ab42edd5830d30.tar.gz
xe-aed173459e4004022deae04619ab42edd5830d30.tar.xz
xe-aed173459e4004022deae04619ab42edd5830d30.zip
wait for enough jobs to finish before asking for more input
This helps -F fail immediately after execution, not after reading the
next line.
Diffstat (limited to 'xe.c')
-rw-r--r--xe.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/xe.c b/xe.c
index 100d196..25e6aa0 100644
--- a/xe.c
+++ b/xe.c
@@ -681,10 +681,15 @@ main(int argc, char *argv[], char *envp[])
 			exit(1);
 		}
 
-		while ((arg = getarg())) {
+		while (1) {
 			buflen = 0;
 			argslen = 0;
 
+			while (runjobs >= maxjobs)
+				mywait();
+			if (!(arg = getarg()))
+				break;
+
 			int n;
 			for (n = optind, i = n + 1; n < cmdend; n = i + 1) {
 				char *pat = argv[n];
@@ -721,6 +726,9 @@ main(int argc, char *argv[], char *envp[])
 	while (1) {
 		// check if there is an arg from a previous iteration
 		if (!keeparg) {
+			while (runjobs >= maxjobs)
+				mywait();
+
 			arg = getarg();
 			if (!arg)
 				break;