From: Harald van Dijk <harald@gigawatt.nl>
To: Luigi Tarenga <luigi.tarenga@gmail.com>
Cc: dash@vger.kernel.org
Subject: Re: possible bug in job control
Date: Tue, 30 Jul 2013 00:47:40 +0200 [thread overview]
Message-ID: <51F6F10C.4060109@gigawatt.nl> (raw)
In-Reply-To: <CAKkO-EgtZw6EuoBz1ishWc-V7LNOzFO98O7A8T=Rqq42DA_T1A@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1305 bytes --]
On 29/07/13 23:44, Luigi Tarenga wrote:
> hi list,
> while writing a script to execute parallel ssh command on many host I found
> a strange behavior of dash. I can replicate it with a very simple script but
> didn't find any documentation about dash or POSIX that can explain it.
>
> tested on centos 6.4 (dash 0.5.5.1) and wih dash compiled from source (0.5.7)
> the following script reports error:
>
> #!/bin/dash
>
> sleep 3 &
> sleep 3 &
> sleep 3 &
> sleep 3 &
>
> #/bin/true
> jobs -l
>
> wait %1
> wait %2
> wait %3
> wait %4
>
> [vortex@lizard ~]$ ./dash-0.5.7/src/dash test.sh
> [4] + 4569 Running
> [3] - 4568 Running
> [2] 4567 Running
> [1] 4566 Running
> prova: 14: wait: No such job: %4
> [vortex@lizard ~]$ echo $?
> 2
Yes, this looks like a bug to me. The number of allocated jobs is always
kept as a multiple of four, and the first check in considering whether
the job number is valid is "if it's greater than or equal to the number
of allocated job, it's invalid". That doesn't look right. That would
only be right if jobs were zero-based, but they aren't. If it's exactly
equal to the number of available jobs, it can still be valid. It works
when adding /bin/true, because four more more jobs end up allocated
internally.
The attached patch should fix it.
Cheers,
Harald
[-- Attachment #2: dash-getjob-off-by-one.patch --]
[-- Type: text/x-patch, Size: 477 bytes --]
commit ddeba5485c3309ffc7010f8924d604a781908e1d
Author: Harald van Dijk <harald@gigawatt.nl>
Date: Tue Jul 30 00:36:53 2013 +0200
getjob: Fix off-by-one error for multiple of four job numbers
diff --git a/src/jobs.c b/src/jobs.c
index bf40204..c2c2332 100644
--- a/src/jobs.c
+++ b/src/jobs.c
@@ -699,7 +699,7 @@ check:
if (is_number(p)) {
num = atoi(p);
- if (num < njobs) {
+ if (num <= njobs) {
jp = jobtab + num - 1;
if (jp->used)
goto gotit;
next prev parent reply other threads:[~2013-07-29 22:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-29 21:44 possible bug in job control Luigi Tarenga
2013-07-29 22:47 ` Harald van Dijk [this message]
[not found] ` <CAKkO-EiY79gEH+SbvK6kF=1v0h7Q5=ypHGcs+m-yHdMFq-L-7A@mail.gmail.com>
2013-07-30 16:17 ` Harald van Dijk
2013-07-31 7:34 ` Herbert Xu
2013-07-30 16:42 ` Luigi Tarenga
2014-09-26 9:28 ` Herbert Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51F6F10C.4060109@gigawatt.nl \
--to=harald@gigawatt.nl \
--cc=dash@vger.kernel.org \
--cc=luigi.tarenga@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox