[Varnish] #878: Varnish child dies with segfault when loading a VCL importing std vmod

Varnish varnish-bugs at varnish-cache.org
Fri Mar 25 14:04:55 CET 2011

#878: Varnish child dies with segfault when loading a VCL importing std vmod
 Reporter:  tmagnien  |       Owner:  phk              
     Type:  defect    |      Status:  new              
 Priority:  normal    |   Milestone:                   
Component:  varnishd  |     Version:  trunk            
 Severity:  normal    |    Keywords:  std vmod segfault

Comment(by tmagnien):

 I made further investigations and here is what I found.

 In the generated VCL code, we have this function :

 static void
 VGC_Init(struct cli *cli)

         Vmod_Func_std._init(&vmod_priv_std, &VCL_conf);
         VRT_init_dir(cli, VCL_conf.director, "simple",
             VGC_backend__default, &vgc_dir_priv__default);
         VCL_conf.director[0] = VCL_conf.director[1];


 What happens is that the 1st time the VCL is loaded (at startup for
 example), the Vmod_Func_std is filled by the VRT_Vmod_Init function. The
 second time the VCL is loaded (by a vcl.load), the VRT_Vmod_Init function
 is called with a Vmod_Func_std pointer value which is different. BUT, the
 VRT_Vmod_Init starts with :

         VTAILQ_FOREACH(v, &vmods, list)
                 if (!strcmp(v->nm, nm))


 And as the std vmod is already loaded, it breaks. So the Vmod_Func_std is
 not populated, so value of Vmod_Func_std._init is NULL, which causes the

 Now I'll try to find the right way to correct this, without loading std
 vmod twice...


Ticket URL: <http://www.varnish-cache.org/trac/ticket/878#comment:2>
Varnish <http://varnish-cache.org/>
The Varnish HTTP Accelerator

More information about the varnish-bugs mailing list