[prev in list] [next in list] [prev in thread] [next in thread] 

List:       subversion-issues
Subject:    [Issue 4461] New - svnserve SEGV with --log--file and --daemon
From:       philip () tigris ! org
Date:       2014-01-15 15:08:35
Message-ID: iz4461 () subversion ! tigris ! org
[Download RAW message or body]

http://subversion.tigris.org/issues/show_bug.cgi?id=4461
                 Issue #|4461
                 Summary|svnserve SEGV with --log--file and --daemon
               Component|subversion
                 Version|trunk
                Platform|All
                     URL|
              OS/Version|All
                  Status|NEW
       Status whiteboard|
                Keywords|
              Resolution|
              Issue type|DEFECT
                Priority|P3
            Subcomponent|svnserve
             Assigned to|issues@subversion
             Reported by|philip






------- Additional comments from philip@tigris.org Wed Jan 15 07:08:34 -0800 2014 -------
svnserve with -d and --log-file will SEGV in the parent process after daemonization:

$ gdb -q -arg subversion/svnserve/.libs/lt-svnserve -dr. --log-file x.x
Reading symbols from
/home/pm/sw/subversion/obj/subversion/svnserve/.libs/lt-svnserve...done.
(gdb) r
Starting program:
/home/pm/sw/subversion/obj/subversion/svnserve/.libs/lt-svnserve -dr. --log-file x.x
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff79869e9 in apr_pool_destroy () from /usr/lib/libapr-1.so.0
(gdb) bt
#0  0x00007ffff79869e9 in apr_pool_destroy () from /usr/lib/libapr-1.so.0
#1  0x00000000004083fb in cleanup_logger (data=0x7ffff5305510)
    at ../src/subversion/svnserve/logger.c:59
#2  0x00007ffff798699e in apr_pool_destroy () from /usr/lib/libapr-1.so.0
#3  0x00007ffff7986975 in apr_pool_destroy () from /usr/lib/libapr-1.so.0
#4  0x00007ffff7986d40 in apr_pool_terminate () from /usr/lib/libapr-1.so.0
#5  0x00007ffff71e1df2 in __run_exit_handlers (status=0, listp=0x7ffff752f4c8, 
    run_list_atexit=true) at exit.c:78
#6  0x00007ffff71e1e45 in *__GI_exit (status=1) at exit.c:100
#7  0x00007ffff79921f9 in apr_proc_detach () from /usr/lib/libapr-1.so.0
#8  0x0000000000416f34 in sub_main (exit_code=0x7fffffffe7ac, argc=4, 
    argv=0x7fffffffe8a8, pool=0x7ffff5305028)
    at ../src/subversion/svnserve/svnserve.c:1170
#9  0x0000000000417456 in main (argc=4, argv=0x7fffffffe8a8)
    at ../src/subversion/svnserve/svnserve.c:1355
(gdb)

I have pool debugging enabled.  Setting a breakpoint on pool_clear_debug the
second time it stops is:

(gdb) bt
#0  pool_clear_debug (pool=0x426c20, 
    file_line=0x7ffff7da509c "memory/unix/apr_pools.c:1445")
    at memory/unix/apr_pools.c:1543
#1  0x00007ffff7d9434e in pool_destroy_debug (pool=0x426c20, 
    file_line=0x7ffff7da509c "memory/unix/apr_pools.c:1445")
    at memory/unix/apr_pools.c:1638
#2  0x00007ffff7d9410e in pool_clear_debug (pool=0x41efe0, 
    file_line=0x7ffff7da509c "memory/unix/apr_pools.c:1445")
    at memory/unix/apr_pools.c:1550
#3  0x00007ffff7d9434e in pool_destroy_debug (pool=0x41efe0, 
    file_line=0x7ffff7da509c "memory/unix/apr_pools.c:1445")
    at memory/unix/apr_pools.c:1638
#4  0x00007ffff7d94437 in apr_pool_destroy_debug (pool=0x41efe0, 
    file_line=0x7ffff7da509c "memory/unix/apr_pools.c:1445")
    at memory/unix/apr_pools.c:1680
#5  0x00007ffff7d93ebd in apr_pool_terminate () at memory/unix/apr_pools.c:1445
#6  0x00007ffff7d97160 in apr_terminate () at misc/unix/start.c:82
#7  0x00007ffff75d0df2 in __run_exit_handlers (status=0, listp=0x7ffff791e4c8, 
    run_list_atexit=true) at exit.c:78
#8  0x00007ffff75d0e45 in *__GI_exit (status=4353056) at exit.c:100
#9  0x00007ffff7da261a in apr_proc_detach (daemonize=1)
    at threadproc/unix/procsup.c:32
#10 0x0000000000416f54 in sub_main (exit_code=0x7fffffffe7ac, argc=4, 
    argv=0x7fffffffe8a8, pool=0x420340)
    at ../src/subversion/svnserve/svnserve.c:1170
#11 0x0000000000417476 in main (argc=4, argv=0x7fffffffe8a8)
    at ../src/subversion/svnserve/svnserve.c:1355

Setting a breakpoint on cleanup_logger shows:

Breakpoint 1, cleanup_logger (data=0x4269d0)
    at ../src/subversion/svnserve/logger.c:58
58	  logger_t *logger = data;
(gdb) n
59	  svn_pool_destroy(logger->pool);
(gdb) p logger->pool
$5 = (apr_pool_t *) 0x426c20

That's the same pool that was being destroyed the second time we hit the
pool_clear_debug, so the pool is being destroyed twice.

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=463&dsMessageId=3071640

To unsubscribe from this discussion, e-mail: [issues-unsubscribe@subversion.tigris.org].
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic