kernel: use that new sleep_on_unlocking in ringbuffers

This commit is contained in:
K. Lange 2021-08-16 18:29:08 +09:00
parent c130197ab8
commit 17dfed4cfd

View File

@ -93,13 +93,14 @@ size_t ring_buffer_read(ring_buffer_t * ring_buffer, size_t size, uint8_t * buff
ring_buffer_increment_read(ring_buffer); ring_buffer_increment_read(ring_buffer);
collected++; collected++;
} }
spin_unlock(ring_buffer->lock);
wakeup_queue(ring_buffer->wait_queue_writers); wakeup_queue(ring_buffer->wait_queue_writers);
if (collected == 0) { if (collected == 0) {
if (sleep_on(ring_buffer->wait_queue_readers) && ring_buffer->internal_stop) { if (sleep_on_unlocking(ring_buffer->wait_queue_readers, &ring_buffer->lock) && ring_buffer->internal_stop) {
ring_buffer->internal_stop = 0; ring_buffer->internal_stop = 0;
break; break;
} }
} else {
spin_unlock(ring_buffer->lock);
} }
} }
wakeup_queue(ring_buffer->wait_queue_writers); wakeup_queue(ring_buffer->wait_queue_writers);
@ -117,17 +118,19 @@ size_t ring_buffer_write(ring_buffer_t * ring_buffer, size_t size, uint8_t * buf
written++; written++;
} }
spin_unlock(ring_buffer->lock);
wakeup_queue(ring_buffer->wait_queue_readers); wakeup_queue(ring_buffer->wait_queue_readers);
ring_buffer_alert_waiters(ring_buffer); ring_buffer_alert_waiters(ring_buffer);
if (written < size) { if (written < size) {
if (ring_buffer->discard) { if (ring_buffer->discard) {
spin_unlock(ring_buffer->lock);
break; break;
} }
if (sleep_on(ring_buffer->wait_queue_writers) && ring_buffer->internal_stop) { if (sleep_on_unlocking(ring_buffer->wait_queue_writers, &ring_buffer->lock) && ring_buffer->internal_stop) {
ring_buffer->internal_stop = 0; ring_buffer->internal_stop = 0;
break; break;
} }
} else {
spin_unlock(ring_buffer->lock);
} }
} }