curl: do not do aio_poll when waiting for a free CURLState
commit2bb5c936c5827e1d831002f7a7517cb8c2c2201d
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 15 May 2017 10:00:59 +0000 (15 12:00 +0200)
committerJeff Cody <jcody@redhat.com>
Tue, 16 May 2017 14:34:50 +0000 (16 10:34 -0400)
treea0a51f4bd3d85535a2945022bc343885097e881e
parent28256d8246f8905cc41cae3db50e5967059d4600
curl: do not do aio_poll when waiting for a free CURLState

Instead, put the CURLAIOCB on a wait list and yield; curl_clean_state will
wake the corresponding coroutine.

Because of CURL's callback-based structure, we cannot easily convert
everything to CoMutex/CoQueue; keeping the QemuMutex is simpler.  However,
CoQueue is a simple wrapper around a linked list, so we can easily
use QSIMPLEQ and open-code a CoQueue, protected by the BDRVCURLState
QemuMutex instead of a CoMutex.

Reviewed-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-id: 20170515100059.15795-8-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
block/curl.c