[padb-devel] [padb commit] r51 - Fix a corner case where the stack-trace "tree" mode

codesite-noreply at google.com codesite-noreply at google.com
Tue Jun 16 11:28:42 BST 2009


Author: apittman
Date: Tue Jun 16 03:12:06 2009
New Revision: 51

Modified:
    trunk/src/padb

Log:
Fix a corner case where the stack-trace "tree" mode
was dropping frames.  If one process in the job
had a short stack further processes in the job
erronously got reported as short too.


Modified: trunk/src/padb
==============================================================================
--- trunk/src/padb	(original)
+++ trunk/src/padb	Tue Jun 16 03:12:06 2009
@@ -1784,7 +1784,7 @@
  # hash containing the "txt" of the function name and a further array
  # of hash references called "children".
  sub go_p {
-    my ( $level, $indent, $indentNo, $lines, @tags ) = @_;
+    my ( $level, $lines, @tags ) = @_;

      my @peers;
      my $prev;
@@ -1795,7 +1795,6 @@

      return if ( !defined($tag) );
      return if ( !defined( $lines->{$tag} ) );
-    return if ( !defined( $lines->{$tag}[$level] ) );

      my @identical = ();
      my @different = ();
@@ -1817,7 +1816,12 @@
              }
          }
      } else {
-        @different = @tags;
+        foreach my $dtag (@tags) {
+            if ( $dtag != $tag ) {
+                push( @different, $dtag );
+            }
+        }
+
      }

      # Move $endlevel on as far as we can...
@@ -1846,10 +1850,10 @@
          $endlevel = ( $#{ $lines->{$tag} } );
      }

-    printf( "level $level, endlevel $endlevel, identical $#identical\n", )
-      if $conf{"tree-verbose"};
+    printf(
+"level $level, endlevel $endlevel, identical:@identical  
different:@different\n",
+    ) if $conf{"tree-verbose"};

-    my $i = $indent;
      for ( my $l = $level ; $l <= $endlevel ; $l++ ) {

          my %this;
@@ -1873,8 +1877,7 @@
              unshift @identical, $tag;
          }

-        $prev->{children} =
-          go_p( $endlevel + 1, "$i", $indentNo + 1, $lines, @identical );
+        $prev->{children} = go_p( $endlevel + 1, $lines, @identical );
      }

      printf(
@@ -1882,11 +1885,12 @@
      ) if $conf{"tree-verbose"};

      if (@different) {
-        my $new = go_p( $level, "$indent", $indentNo, $lines, @different );
+        my $new = go_p( $level, $lines, @different );
          foreach my $n ( @{$new} ) {
              push @peers, $n;
          }
      }
+
      return \@peers;
  }

@@ -2886,7 +2890,7 @@
      }

      if ($tree) {
-        print show_tree go_p( 0, "", 0, $lines,
+        print show_tree go_p( 0, $lines,
              ( sort { $a <=> $b } ( keys %$lines ) ) );
      } elsif ($compress) {
          foreach my $tag ( sort { $a <=> $b } ( keys %$lines ) ) {




More information about the padb-devel mailing list