[Spice-devel] Tripping assertions in spice-common/common/ring.h

Nahum Shalman nshalman at elys.com
Thu Jul 19 06:40:56 PDT 2012


I need help tracking this down:
((null):66324): SpiceWorker-ERROR **: 
../spice-common/common/ring.h:56:ring_add: assertion `ring->next != NULL 
&& ring->prev != NULL' failed

I've been seeing this from time to time on my VMs.
When it happens, the UI stops being responsive, but QEMU doesn't crash.

I've avoided reporting it because I was using a non-release version of QEMU.
I've recently had help getting the Solaris(ish) patches applied to QEMU 
1.1.0 and using that, I still tripped the assert.
I launched a VM (Fedora 16), opened a browser and went to a site that 
has some weird overly fancy graphics and poked around on it for a little 
while until everything locked up.
And there in the log was my old friend the assertion failure in ring.h

I'm pretty sure the culprit is somewhere in the Spice code base.

<I slept on the problem, and picked it up this morning with dtrace>

In the end I added a call to spice_backtrace to the spice_assert macro, 
and while the backtrace it provides wasn't all that helpful
("main_channel_handle_parsed: agent start" was all I saw in the logs), 
it gave me a probe point for dtrace.


Here's the dtrace script I used to hunt down the error:
------------------------------------------------------------
#!/usr/sbin/dtrace -s

#pragma D option quiet

pid$target:libspice-server.so.1:ring_add:entry
{
         self->follow = 1;
}

pid$target:libspice-server.so.1:ring_add:return
/self->follow >= 1/
{
         self->follow = 0;
/*      printf("ring_add returned cleanly\n"); */
}

pid$target:libspice-server.so.1:spice_backtrace:entry
/self->follow >= 1/
{
         printf("called spice_backtrace from ring_add\n");
         ustack();
}
------------------------------------------------------------

And this is the output I got when the VM decided to hang:

called spice_backtrace from ring_add

               libspice-server.so.1`spice_backtrace
               libspice-server.so.1`ring_add+0x2e
               libspice-server.so.1`ring_add_after+0x23
               libspice-server.so.1`__current_add_drawable+0x61
               libspice-server.so.1`red_current_add_equal+0xee
               libspice-server.so.1`red_current_add+0x18d
               libspice-server.so.1`red_current_add_qxl+0xa7
               libspice-server.so.1`red_process_drawable+0x223
               libspice-server.so.1`red_process_commands+0x231
               libspice-server.so.1`handle_dev_oom+0x13a
               libspice-server.so.1`dispatcher_handle_single_read+0x14b
               libspice-server.so.1`dispatcher_handle_recv_read+0x19
               libspice-server.so.1`handle_dev_input+0x32
               libspice-server.so.1`red_worker_main+0x287
               libc.so.1`_thrp_setup+0x83
               libc.so.1`_lwp_start

called spice_backtrace from ring_add

               libspice-server.so.1`spice_backtrace
               libspice-server.so.1`spice_logv+0x1e7
               libspice-server.so.1`spice_log+0xbc
               libspice-server.so.1`ring_add+0x59
               libspice-server.so.1`ring_add_after+0x23
               libspice-server.so.1`__current_add_drawable+0x61
               libspice-server.so.1`red_current_add_equal+0xee
               libspice-server.so.1`red_current_add+0x18d
               libspice-server.so.1`red_current_add_qxl+0xa7
               libspice-server.so.1`red_process_drawable+0x223
               libspice-server.so.1`red_process_commands+0x231
               libspice-server.so.1`handle_dev_oom+0x13a
               libspice-server.so.1`dispatcher_handle_single_read+0x14b
               libspice-server.so.1`dispatcher_handle_recv_read+0x19
               libspice-server.so.1`handle_dev_input+0x32
               libspice-server.so.1`red_worker_main+0x287
               libc.so.1`_thrp_setup+0x83
               libc.so.1`_lwp_start

Does this give any insight into what I might be suffering from?

-Nahum

P.S. In addition to those errors, I've also seen some of:
((null):7636): SpiceWorker-ERROR **: 
../spice-common/common/ring.h:83:ring_remove: assertion `item->next != 
NULL && item->prev != NULL' failed
((null):8838): SpiceWorker-ERROR **: 
../spice-common/common/ring.h:84:ring_remove: assertion `item->next != 
item' failed



More information about the Spice-devel mailing list