bad awk output on vkernel

YONETANI Tomokazu qhwt+dfly at
Tue Aug 18 05:24:23 PDT 2009

On Thu, Aug 13, 2009 at 11:48:18PM -0700, Matthew Dillon wrote:
>     Is this with the latest master ?   I did fix some pipe bugs last week
>     which could very well cause this sort of behavior (where the data gets
>     corrupted through the pipe).  I'm pretty sure I got all the bugs, there
>     shouldn't be any left.
>     If it isn't that I'll have to try to reproduce it on a test bed and
>     then track the issue down.

I'd say it's not a pipe issue, but specific to running awk on vkernel,
because this perl version never produces bad output on vkernel:

  my $SUBSEP = "\034";
  my $flag = 0;
  my @record;
  while (<>) {
      if (/^[ \t]*(;|$)/) {
  	$flag = 0;
      if (/^[^ \t]/) {
  	if ($flag == 0) {
  	    push(@record, $_);
  	    $flag = 1;
  	else {
  	    my $l = @record - 1;
  	    $record[$l] .= $SUBSEP;
  	    $record[$l] .= $_;
  foreach (sort @record) {
      print $_, "\n";

My guess is that awk on vkernel has problem handling an array of long
strings, especially its elements are assigned to in a non-sequential way;
if I commented the line calling sort() function and it greatly reduced
the probability of inconsistent output :)

I also tried gawk from pkgsrc, but it seems to have similar issue.
Probably I need to take a closer look at the source code.

More information about the Kernel mailing list