On 10/12/2015 06:25 AM, Michal Privoznik wrote:
> So we have this mechanism that on SIGUSR1 the virtlockd dumps its
> internal state into a JSON file, reexec itself and the reloads
> the internal state back. However, there's a bug in our
> implementation:
> 
>   (gdb) signal SIGUSR1
>   Continuing with signal SIGUSR1.
>   [Thread 0x7fd094f7b700 (LWP 10602) exited]
>   process 10600 is executing new program: 
> /home/zippy/work/libvirt/libvirt.git/src/virtlockd
>   warning: Could not load shared library symbols for linux-vdso.so.1.
>   Do you need "set solib-search-path" or "set sysroot"?
>   [Thread debugging using libthread_db enabled]
>   Using host libthread_db library "/lib64/libthread_db.so.1".
>   [New Thread 0x7fb28bc3c700 (LWP 14501)]
> 
>   Program received signal SIGSEGV, Segmentation fault.
>   0x00007fb29133d530 in virExpandN (ptrptr=0x70, size=8, countptr=0x68, 
> add=1, report=true, domcode=7, filename=0x7fb29138aeab "rpc/virnetserver.c", 
> funcname=0x7fb29138b680 <__FUNCTION__.15821> "virNetServerAddProgram", 
> linenr=661) at util/viralloc.c:288
>   288         if (*countptr + add < *countptr) {
>   (gdb) bt
>   #0  0x00007fb29133d530 in virExpandN (ptrptr=0x70, size=8, countptr=0x68, 
> add=1, report=true, domcode=7, filename=0x7fb29138aeab "rpc/virnetserver.c", 
> funcname=0x7fb29138b680 <__FUNCTION__.15821> "virNetServerAddProgram", 
> linenr=661) at util/viralloc.c:288
>   #1  0x00007fb29132a267 in virNetServerAddProgram (srv=0x0, 
> prog=0x7fb2915d08b0) at rpc/virnetserver.c:661
>   #2  0x00007fb29131f27f in main (argc=1, argv=0x7fff8f771298) at 
> locking/lock_daemon.c:1445
> 
> Notice the NULL @srv passed to frame 2? Usually, the @srv
> variable is initialized on fresh start. However, in case of
> daemon reload, the code path that is responsible for initializing
> the value was not triggered and therefore we crashed immediately.
> Fix this by always setting the variable.
> 
> Signed-off-by: Michal Privoznik <mpriv...@redhat.com>
> ---
>  src/locking/lock_daemon.c | 2 ++
>  1 file changed, 2 insertions(+)
> 

ACK - although you may want to considering altering the comment after
the virLockDaemonPostExecRestart call to indicate that getting the need
to get the srv pointer again...


John

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to