From a3008e447c2fb6ec564f5d0232b0b8aad4980cc4 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 16 May 2017 13:43:06 +0300 Subject: [PATCH] zephyr/modusocket: First step to switch to alternative FIFO processing. Here we wait for non-empty FIFO, and then directly access/drop its head element. --- zephyr/modusocket.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/zephyr/modusocket.c b/zephyr/modusocket.c index aa638d4134..37dfab638d 100644 --- a/zephyr/modusocket.c +++ b/zephyr/modusocket.c @@ -399,12 +399,14 @@ STATIC mp_uint_t sock_read(mp_obj_t self_in, void *buf, mp_uint_t max_len, int * } DEBUG_printf("TCP recv: no cur_pkt, getting\n"); - struct net_pkt *pkt = k_fifo_get(&socket->recv_q, K_FOREVER); - + _k_fifo_wait_non_empty(&socket->recv_q, K_FOREVER); + struct net_pkt *pkt = _k_fifo_peek_head(&socket->recv_q); if (pkt == NULL) { DEBUG_printf("TCP recv: NULL return from fifo\n"); continue; } + // Drop head packet from queue + k_fifo_get(&socket->recv_q, K_NO_WAIT); DEBUG_printf("TCP recv: new cur_pkt: %p\n", pkt); socket->cur_pkt = pkt;