diff options
Diffstat (limited to 'bsd/drm/lock.c')
-rw-r--r-- | bsd/drm/lock.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/bsd/drm/lock.c b/bsd/drm/lock.c index 1affcd1d..ec295b2b 100644 --- a/bsd/drm/lock.c +++ b/bsd/drm/lock.c @@ -135,9 +135,12 @@ static int drm_flush_queue(drm_device_t *dev, int context) if (atomic_read(&q->use_count) > 1) { atomic_inc(&q->block_write); atomic_inc(&q->block_count); - error = tsleep(&q->flush_queue, PCATCH|PZERO, "drmfq", 0); - if (error) - return error; + for (;;) { + if (!DRM_BUFCOUNT(&q->waitlist)) break; + error = tsleep(&q->flush_queue, PCATCH|PZERO, "drmfq", 0); + if (error) + return error; + } atomic_dec(&q->block_count); } atomic_dec(&q->use_count); |