[Spice-devel] HD videos cause spice server to assert.

Rozen Lin rozen.lin at sinobot.com.cn
Fri Jan 4 01:52:51 PST 2013


Hi,All,
  Currently when testing the HD videos, such as the 1080p videos, in
Spice, I found occasionally the spice-server may assert in red_worker
such as:
dev_destroy_surfaces refs=1 surface_id=179  
dev_destroy_surfaces refs=0 surface_id=182  
validate_surface: failed on 164
validate_surface: panic !worker->surfaces[surface_id].context.canvas
or 
spice_server_char_device_add_interface: CHAR_DEVICE vdagent
main_channel_handle_parsed: agent start
dev_destroy_surfaces: ASSERT !worker->surfaces[i].context.canvas failed
/usr/lib/libspice-server.so.1(+0xbe105)[0x7fdea67cf105]
/usr/lib/libspice-server.so.1(+0x35ba0)[0x7fdea6746ba0]
/usr/lib/libspice-server.so.1(+0x1b3d3)[0x7fdea672c3d3]
/usr/lib/libspice-server.so.1(+0x3497c)[0x7fdea674597c]
/lib/libpthread.so.0(+0x69ca)[0x7fdea7b5b9ca]
/lib/libc.so.6(clone+0x6d)[0x7fdea5fdb69d]
 
check the code:
static inline void dev_destroy_surfaces(RedWorker *worker)
{
    int i;

    flush_all_qxl_commands(worker);
    //to handle better
    for (i = 0; i < NUM_SURFACES; ++i) {
        if (worker->surfaces[i].context.canvas) {
            destroy_surface_wait(worker, i);
            if (worker->surfaces[i].context.canvas) {
                red_destroy_surface(worker, i);
            }
            ASSERT(!worker->surfaces[i].context.canvas);
        }
    }
...
here seems the destroy_surface_wait() has not released all the refs on
the canvas which causes the last red_destroy_surface() does nothing and
then ASSERT() after it.

Is this a known issue in such high image/stream pressure case? Could any
one share some clues for the fix, thanks in advance!
Best regards,
   Rozen Lin.




More information about the Spice-devel mailing list