Hello Massimo,

No problem at all. It was easy finally to recompile and start the apache in
debug.
Now I can do this I can troubleshoot anything.

Sorry for not responding yesterday but I was off for Thanksgiving here.

If you want I can do a real patch. Or even make a commit to a git
repository if this is what you guys use.
I have no idea how you guys collaboratively are working.

Thank you,
Brice.




On Fri, Nov 29, 2019 at 4:50 AM Massimo Manghi <massimo.man...@unipr.it>
wrote:

> Thank you Brice for having found this annoying bug. I realized the hash
> table is part of the cache implementation which is kept hidden in
> src/mod_rivet_ng/mod_rivet_cache.c. I will add a function to this
> module's public interface to remove an entry from the cache. Just to
> keep the code consistent. Still the fix is exactly the one you provided.
>
>   -- Massimo
>
> On 11/27/19 8:01 PM, Brice Hamon wrote:
> > Hi Guys,
> >
> > I found a small issue in rivet3.1.1 and before.
> >
> > I was creating a rvt file which was not readable by apachebecause of
> > different user file access right and I notice apache reporting a child
> > abort when I was trying to execute that rvt file.
> >
> > I found an old email from Mon, Apr 20, 2015from Massimo for rivet 2.2.2
> > explaining how to recompile apache and rivet in debug mode, thank you
> > for that.
> >
> > The crash happens at the second access, not the first time.
> >
> > Here is the trace:
> >
> > Thread 1 "httpd" received signal SIGSEGV, Segmentation fault.
> > 0x00007fffe7efad77 in Tcl_SetObjResult () from /usr/lib64/libtcl8.6.so
> > <http://libtcl8.6.so/>
> > Missing separate debuginfos, use: zypper install
> > libapr-util1-debuginfo-1.5.3-3.2.x86_64
> > libapr1-debuginfo-1.5.1-5.1.x86_64
> > libdb-4_8-debuginfo-4.8.30-30.4.x86_64
> > libexpat1-debuginfo-2.1.0-20.1.x86_64
> > libldap-2_4-2-debuginfo-2.4.41-14.1.x86_64
> > libopenssl1_0_0-debuginfo-1.0.1i-21.1.x86_64
> > libpcre1-debuginfo-8.39-5.1.x86_64
> > libsasl2-3-debuginfo-2.1.26-8.1.x86_64
> > libuuid1-debuginfo-2.25-21.1.x86_64 libz1-debuginfo-1.2.8-8.1.x86_64
> > tcl-debuginfo-8.6.1-3.6.x86_64
> > (gdb) where
> > #0  0x00007fffe7efad77 in Tcl_SetObjResult () from
> > /usr/lib64/libtcl8.6.so <http://libtcl8.6.so/>
> > #1  0x00007fffe81ae9b7 in Rivet_UrlScript (clientData=0x7ffff7e370a0,
> >      interp=0x6ff720, objc=1, objv=0x703900) at
> > mod_rivet_ng/rivetCore.c:1929
> > #2  0x00007fffe7e33d97 in TclNRRunCallbacks () from
> > /usr/lib64/libtcl8.6.so <http://libtcl8.6.so/>
> > #3  0x00007fffe81b525a in Rivet_SendContent (private=0x7ffff7e370a0,
> >      r=0x7ffff7e010a0) at mod_rivet_ng/mod_rivet_generator.c:317
> > #4  0x00007fffe74e48b7 in Prefork_MPM_Request (r=0x7ffff7e010a0, ctype=1)
> >      at mod_rivet_ng/rivet_prefork_mpm.c:131
> > #5  0x00007fffe81a914f in Rivet_Handler (r=0x7ffff7e010a0)
> >      at mod_rivet_ng/mod_rivet.c:483
> > #6  0x0000000000457930 in ap_run_handler (r=0x7ffff7e010a0) at
> config.c:169
> > #7  0x00000000004583e9 in ap_invoke_handler (r=0x7ffff7e010a0) at
> > config.c:433
> > #8  0x0000000000473de9 in ap_process_async_request (r=0x7ffff7e010a0)
> >      at http_request.c:338
> > #9  0x0000000000473ea7 in ap_process_request (r=0x7ffff7e010a0)
> >      at http_request.c:373
> > #10 0x0000000000470202 in ap_process_http_sync_connection
> (c=0x7ffff7e17290)
> >      at http_core.c:210
> > #11 0x000000000047030e in ap_process_http_connection (c=0x7ffff7e17290)
> >      at http_core.c:251
> > #12 0x00000000004654f0 in ap_run_process_connection (c=0x7ffff7e17290)
> >      at connection.c:41
> > #13 0x00000000004659f9 in ap_process_connection (c=0x7ffff7e17290,
> >      csd=0x7ffff7e170a0) at connection.c:213
> > #14 0x00007fffeaa5aeb9 in child_main (child_num_arg=0) at prefork.c:704
> > #15 0x00007fffeaa5afd6 in make_child (s=0x7ffff7fc1080, slot=0) at
> > prefork.c:746
> > #16 0x00007fffeaa5b5aa in prefork_run (_pconf=0x7ffff7fed028,
> >      plog=0x7ffff7fbb028, s=0x7ffff7fc1080) at prefork.c:956
> > #17 0x0000000000436e43 in ap_run_mpm (pconf=0x7ffff7fed028,
> >      plog=0x7ffff7fbb028, s=0x7ffff7fc1080) at mpm_common.c:94
> > #18 0x000000000042f13d in main (argc=2, argv=0x7fffffffe148) at
> main.c:777
> >
> > After talking to Massimo, we confirmed that this is a bug within rivet
> > caching mechanism.
> >
> > An entry is created in the TCL cache hash map for each file to be
> > cached, but not removed if the file can't be read.
> > I am guessing that non critical bug as been there forever.
> >
> > I modify the file rivet-3.1.1/src/mod_rivet_ng/rivetCore.c and added as
> > a test line 1914 a TCL_DeleteHashEntry to validate the problem and
> > indeed no more crash after this.
> >
> > if (result != TCL_OK)
> >          {
> >              // Hash cleanup
> >              Tcl_DeleteHashEntry(entry);
> >              Tcl_DecrRefCount(script);
> >              return result;
> >          }
> >
> > I guess a proper method to remove an entry should be added
> > in mod_rivet_cache.c.
> >
> > Thank you.
> > Brice.
> >
> >
> >
> >
> >
> >
>

Reply via email to