summaryrefslogtreecommitdiff
path: root/apps/buffering.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/buffering.c')
-rw-r--r--apps/buffering.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/apps/buffering.c b/apps/buffering.c
index a130a787ff..c47564b7e1 100644
--- a/apps/buffering.c
+++ b/apps/buffering.c
@@ -1339,7 +1339,8 @@ static struct memory_handle *prep_bufdata(int handle_id, size_t *size,
1339 1339
1340 if (h->filerem > 0 && avail < realsize) { 1340 if (h->filerem > 0 && avail < realsize) {
1341 /* Data isn't ready. Request buffering */ 1341 /* Data isn't ready. Request buffering */
1342 buf_request_buffer_handle(handle_id); 1342 LOGFQUEUE("buffering >| Q_START_FILL %d",handle_id);
1343 queue_send(&buffering_queue, Q_START_FILL, handle_id);
1343 /* Wait for the data to be ready */ 1344 /* Wait for the data to be ready */
1344 do 1345 do
1345 { 1346 {
@@ -1486,7 +1487,6 @@ SECONDARY EXPORTED FUNCTIONS
1486============================ 1487============================
1487 1488
1488buf_handle_offset 1489buf_handle_offset
1489buf_request_buffer_handle
1490buf_set_base_handle 1490buf_set_base_handle
1491buf_handle_data_type 1491buf_handle_data_type
1492buf_is_handle 1492buf_is_handle
@@ -1510,12 +1510,6 @@ ssize_t buf_handle_offset(int handle_id)
1510 return h->offset; 1510 return h->offset;
1511} 1511}
1512 1512
1513void buf_request_buffer_handle(int handle_id)
1514{
1515 LOGFQUEUE("buffering >| Q_START_FILL %d",handle_id);
1516 queue_send(&buffering_queue, Q_START_FILL, handle_id);
1517}
1518
1519void buf_set_base_handle(int handle_id) 1513void buf_set_base_handle(int handle_id)
1520{ 1514{
1521 mutex_lock(&llist_mutex); 1515 mutex_lock(&llist_mutex);
@@ -1642,7 +1636,15 @@ static void NORETURN_ATTR buffering_thread(void)
1642 LOGFQUEUE("buffering < Q_START_FILL %d", (int)ev.data); 1636 LOGFQUEUE("buffering < Q_START_FILL %d", (int)ev.data);
1643 shrink_buffer(); 1637 shrink_buffer();
1644 queue_reply(&buffering_queue, 1); 1638 queue_reply(&buffering_queue, 1);
1645 filling |= buffer_handle((int)ev.data, 0); 1639 if (buffer_handle((int)ev.data, 0)) {
1640 filling = true;
1641 }
1642 else if (num_handles > 0 && conf_watermark > 0) {
1643 update_data_counters(NULL);
1644 if (data_counters.useful >= BUF_WATERMARK) {
1645 send_event(BUFFER_EVENT_BUFFER_LOW, NULL);
1646 }
1647 }
1646 break; 1648 break;
1647 1649
1648 case Q_BUFFER_HANDLE: 1650 case Q_BUFFER_HANDLE:
@@ -1699,12 +1701,7 @@ static void NORETURN_ATTR buffering_thread(void)
1699#endif 1701#endif
1700 1702
1701 if (filling) { 1703 if (filling) {
1702 if (data_counters.remaining > 0 && BUF_USED < buffer_len) { 1704 filling = data_counters.remaining > 0 ? fill_buffer() : false;
1703 filling = fill_buffer();
1704 }
1705 else if (data_counters.remaining == 0) {
1706 filling = false;
1707 }
1708 } else if (ev.id == SYS_TIMEOUT) { 1705 } else if (ev.id == SYS_TIMEOUT) {
1709 if (data_counters.useful < BUF_WATERMARK) { 1706 if (data_counters.useful < BUF_WATERMARK) {
1710 /* The buffer is low and we're idle, just watching the levels 1707 /* The buffer is low and we're idle, just watching the levels