Messages in this thread | | | Date | Mon, 17 Sep 2012 10:32:36 -0600 | From | David Ahern <> | Subject | Re: perf script: rwtop: SIGALRM and pipe read race |
| |
On 9/17/12 10:02 AM, Arnaldo Carvalho de Melo wrote: > Em Mon, Sep 17, 2012 at 09:16:19AM -0600, David Ahern escreveu: >> On 9/17/12 8:55 AM, David Ahern wrote: >>> 2. the rwtop.pl script is not handling negative return values ($ret < 0) >>> properly -- the '$ret > 0' check is succeeding even though $ret is >>> negative (e.g., -EAGAIN) leading to astronomical read values >> >> I think perl is treating $ret as an unsigned integer. >> >> Again, I know little about perl, but this change to >> ./scripts/perl/rwtop.pl makes it behave properly: >> >> my $n = sprintf("%d", $ret); >> >> if ($n > 0) { >> ... > > I think what you figured out makes sense, its the best we have and you > found it to get it back working, could you please send the two patches > properly signed-off, etc?
I'll do that for the readn.
The above change seems like a workaround - not a proper fix. Why is perl treating it like an unsigned int? The trace format for the read syscall shows long. How is the binding done for perl? I can't make heads or tails of it scanning the files under perl. If we are forced to do a hack like the above is there a better way? I tried (int) $ret and perl did not like that. Any other (better) options?
David
| |