On 10/20/2010 04:30 AM, Stefan Hajnoczi wrote:

     } else if (acb->ret == -EINPROGRESS) {
         active = 1;
     }
-    mutex_unlock(&lock);

     if (active) {
         /* fail safe: if the aio could not be canceled, we wait for
while (qemu_paio_error(acb) == EINPROGRESS)
     ;

Tight loop with no memory barrier reading a memory location that is
updated by another thread.  We shouldn't communicate between threads
without barriers.

We shouldn't use a tight loop period. A condition should be used if signalling is needed.

And we shouldn't rely on atomic assignments to communicate between threads. Just use a mutex and avoid being fancier than we need to be.

Regards,

Anthony Liguori

Stefan



Reply via email to