[Varnish] #162: Varnish trunk dies with assert error in SES_Delete()

Varnish varnish-bugs at projects.linpro.no
Mon Oct 8 17:03:03 CEST 2007


#162: Varnish trunk dies with assert error in SES_Delete()
---------------------------------------------------------+------------------
 Reporter:  anders                                       |        Owner:  phk  
     Type:  defect                                       |       Status:  new  
 Priority:  high                                         |    Milestone:       
Component:  varnishd                                     |      Version:  trunk
 Severity:  normal                                       |   Resolution:       
 Keywords:  varnishd core dump SES_Delete cache_session  |  
---------------------------------------------------------+------------------
Comment (by anders):

 To check for spurious piperead/pipewrite, I use
 http://phk.freebsd.dk/misc/anordby.patch and log with this command:
 varnishlog | grep ANORDBY >anordby.log 2>&1

 I use this program to check the output:

 {{{
 #! /usr/bin/perl

 %he=();

 while (<STDIN>) {
         $line = $_;
         if (/ANORDBY (.*) 0x([0-9a-f]+)/) {
                 $cmdtxt = $1;
                 $hex = $2;
                 if (exists $he{"$hex"}) {
                         if ($cmdtxt eq "piperead") {
                                 if ($he{"$hex"}{"pipewrite"} == 1) {
                                         delete($he{"$hex"});
                                 } else {
                                         $he{"$hex"}{"txt"} .= $_;
                                 }
                         } elsif ($cmdtxt eq "pipewrite") {
                                 if ($he{"$hex"}{"pipewrite"} == 1) {
                                         delete($he{"$hex"});
                                 } else {
                                         $he{"$hex"}{"txt"} .= $_;
                                 }
                         } else {
                                 $he{"$hex"}{"txt"} .= $_;
                         }
                 } else {
                         $he{"$hex"}{"txt"} .= $_;
                         if ($cmdtxt eq "piperead") {
                                 $he{"$hex"}{"piperead"} = 1;
                         } elsif ($cmdtxt eq "pipewrite") {
                                 $he{"$hex"}{"pipewrite"} = 1;
                         }
                         $he{"$hex"}{"txt"} .= $_;
                 }
         }
 }

 foreach $l (keys %he) {
         print "Address $l =>\n";
         print $he{"$l"}{"txt"} . "\n";
 }
 }}}

 This shows a number of pipewrite pairs, with no read:
 {{{
 Address 1a53008 =>
     0 Debug          "ANORDBY pipewrite 0x1a53008"
     0 Debug          "ANORDBY pipewrite 0x1a53008"

 Address 224f008 =>
     0 Debug          "ANORDBY pipewrite 0x224f008"
     0 Debug          "ANORDBY pipewrite 0x224f008"

 Address 3231008 =>
     0 Debug          "ANORDBY pipewrite 0x3231008"
     0 Debug          "ANORDBY pipewrite 0x3231008"

 (..)
 }}}

-- 
Ticket URL: <http://varnish.projects.linpro.no/ticket/162#comment:12>
Varnish <http://varnish.projects.linpro.no/>
The Varnish HTTP Accelerator


More information about the varnish-bugs mailing list