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

Yonit Halperin yhalperi at redhat.com
Sun Jul 22 11:14:03 PDT 2012


Hi,
the trace implies some problem in the drawables tree structure. Please 
describe in more details how you reproduce it: which web site, which 
browser you use, what operations you execute on the web site? In 
addition, what is the qxl driver version, and are surfaces and/or 
caching enabled?
What is the spice-server version? Is it a modified version?

Thanks,
Yonit.
On 07/19/2012 04:40 PM, Nahum Shalman wrote:
> 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
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel




More information about the Spice-devel mailing list