Cause:
In red_wait_pipe_item_sent red_worker increased and decreased the reference to the pipe item using channel_cbs->hold_item, and channel_cbs->release_item.
These calls can be called only by red_channel
Consequence:
display_channel_client_release_item_before_push is called twice and leads to a double call to ring_remove(&dpi->base).
Fix:
Instead ref/put_drawable_pipe_item are called.
Result:
For each item ring_remove is called once, as it should. spice-server does not abort.
DescriptionMarian Krcmarik
2012-05-23 11:30:40 UTC
Created attachment 586315[details]
Backtrace from qemu-kvm when doing multiple resolution changes
Description of problem:
When doing resolution changes in a loop on guest, qemu-kvm process crashes with sigabrt, Sometimes I need to wait for longer time, sometimes It occurs after several resolution changes.
Following ASSERT os raised:
dev_destroy_surfaces: ASSERT !worker->surfaces[i].context.canvas failed
I am attaching bt from qemu-kvm process
Version-Release number of selected component (if applicable):
spice-server-0.10.1-10.el6.x86_64
qemu-kvm-0.12.1.2-2.292.el6.x86_64
spice-gtk-0.11-10.el6.x86_
WindowsXP guest with qxl driver with off-screen surfaces support installed
How reproducible:
100% (If you try long enough)
Steps to Reproduce:
1. Connect to a Windows guest with qxl driver installed.
2. Run resolution changes in loop
Actual results:
sigabrt is catch on qemu-kvm process.
Expected results:
Smooth resolution changes.
Additional info:
Comment 1Christophe Fergeau
2012-05-23 11:43:41 UTC
This is
spice_assert(ring->next != NULL && ring->prev != NULL);
triggering in spice-server/common/ring.h
How do you do these resolution changes in a loop? Manually or do you have a tool to do that?
(In reply to comment #1)
> This is
> spice_assert(ring->next != NULL && ring->prev != NULL);
> triggering in spice-server/common/ring.h
>
> How do you do these resolution changes in a loop? Manually or do you have a
> tool to do that?
I am running the script from bug #578845.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.
http://rhn.redhat.com/errata/RHBA-2013-0529.html
Comment 14Christophe Fergeau
2013-05-30 09:32:20 UTC
*** Bug 863495 has been marked as a duplicate of this bug. ***
Created attachment 586315 [details] Backtrace from qemu-kvm when doing multiple resolution changes Description of problem: When doing resolution changes in a loop on guest, qemu-kvm process crashes with sigabrt, Sometimes I need to wait for longer time, sometimes It occurs after several resolution changes. Following ASSERT os raised: dev_destroy_surfaces: ASSERT !worker->surfaces[i].context.canvas failed I am attaching bt from qemu-kvm process Version-Release number of selected component (if applicable): spice-server-0.10.1-10.el6.x86_64 qemu-kvm-0.12.1.2-2.292.el6.x86_64 spice-gtk-0.11-10.el6.x86_ WindowsXP guest with qxl driver with off-screen surfaces support installed How reproducible: 100% (If you try long enough) Steps to Reproduce: 1. Connect to a Windows guest with qxl driver installed. 2. Run resolution changes in loop Actual results: sigabrt is catch on qemu-kvm process. Expected results: Smooth resolution changes. Additional info: