On 17/03/21 16:17, David Edmondson wrote:
+    if (tkt) {
+        if (tkt->read) {
+            if (lock->owners >= 0) {
+                lock->owners++;
+                co = tkt->co;
+            }
+        } else {
+            if (lock->owners == 0) {
+                lock->owners = -1;
+                co = tkt->co;
+            }
+        }
+    }
+
+    if (co) {
+        QSIMPLEQ_REMOVE_HEAD(&lock->tickets, next);
+        qemu_co_mutex_unlock(&lock->mutex);
+        aio_co_wake(co);
+    } else {
+        qemu_co_mutex_unlock(&lock->mutex);
+    }

This block could be pushed up into the earlier block, but I imagine that
the compiler will do it for you.

I guess I could do

    if (!tkt || (tkt->read ? lock->owners < 0 : lock->owners != 0)) {
        qemu_co_mutex_unlock(&lock->mutex);
        return;
    }
    if (tkt->read) {
        lock->owners++;
    } else {
        lock->owners = -1;
    }

    co = tkt->co;
    QSIMPLEQ_REMOVE_HEAD(&lock->tickets, next);
    qemu_co_mutex_unlock(&lock->mutex);
    aio_co_wake(co);

but I find it less readable.  So that leaves only the of/or typo, right?

Paolo


Reply via email to