> > On Mon, Apr 08, 2013 at 12:27:06PM +0000, Zhanghaoyu (A) wrote: > >> On Sun, Apr 07, 2013 at 04:58:07AM +0000, Zhanghaoyu (A) wrote: > >>>>>> I start a kvm VM with vnc(using the zrle protocol) connect, sometimes qemu program crashed during starting period, received signal SIGABRT. > >>>>>> Trying about 20 times, this crash may be reproduced. > >>>>>> I guess the cause memory corruption or double free. > >>>>> > >>>>> Which version of QEMU are you running? > >>>>> > >>>>> Please try qemu.git/master. > > Please try again with latest master, might be fixed meanwhile. > > If it still happens pleas provide full qemu and vnc client command lines. > > >> backtrace from core file is shown as below: > >> > >> Program received signal SIGABRT, Aborted. > > >> #8 0x00007f32efd26d07 in vnc_disconnect_finish (vs=0x7f32f0c762d0) > >> at ui/vnc.c:1050 > > Do you have a vnc client connected? Do you close it? > I have a vnc client connected, it was auto closed while qemu crashed. > Any errors reported by the vnc client (maybe it disconnects due to an error in the data stream)? > No errors reported by the vnc client, just popup a reconnect window. And, I have tried to fix this bug, not reproduce this crash after tried about 100 times, patch is shown as below, --- a/ui/vnc-jobs.c 2013-04-18 20:10:07.000000000 +0800 +++ b/ui/vnc-jobs.c 2013-04-18 20:14:06.000000000 +0800 @@ -234,7 +234,6 @@ static int vnc_worker_thread_loop(VncJob vnc_unlock_output(job->vs); goto disconnected; } - vnc_unlock_output(job->vs); /* Make a local copy of vs and switch output buffers */ vnc_async_encoding_start(job->vs, &vs); @@ -252,6 +251,8 @@ static int vnc_worker_thread_loop(VncJob if (job->vs->csock == -1) { vnc_unlock_display(job->vs->vd); + vnc_async_encoding_end(job->vs, &vs); + vnc_unlock_output(job->vs); goto disconnected; } @@ -269,7 +270,6 @@ static int vnc_worker_thread_loop(VncJob vs.output.buffer[saved_offset] = (n_rectangles >> 8) & 0xFF; vs.output.buffer[saved_offset + 1] = n_rectangles & 0xFF; - vnc_lock_output(job->vs); if (job->vs->csock != -1) { buffer_reserve(&job->vs->jobs_buffer, vs.output.offset); buffer_append(&job->vs->jobs_buffer, vs.output.buffer, @@ -278,6 +278,8 @@ static int vnc_worker_thread_loop(VncJob vnc_async_encoding_end(job->vs, &vs); qemu_bh_schedule(job->vs->bh); + } else { + vnc_async_encoding_end(job->vs, &vs); } vnc_unlock_output(job->vs); Thanks, Zhang Haoyu -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html