@@ -52,7 +52,6 @@ typedef struct _socket_obj_t {
52
52
struct k_fifo recv_q ;
53
53
struct k_fifo accept_q ;
54
54
};
55
- struct net_pkt * cur_pkt ;
56
55
57
56
#define STATE_NEW 0
58
57
#define STATE_CONNECTING 1
@@ -208,7 +207,6 @@ socket_obj_t *socket_new(void) {
208
207
socket_obj_t * socket = m_new_obj_with_finaliser (socket_obj_t );
209
208
socket -> base .type = (mp_obj_t )& socket_type ;
210
209
k_fifo_init (& socket -> recv_q );
211
- socket -> cur_pkt = NULL ;
212
210
socket -> state = STATE_NEW ;
213
211
return socket ;
214
212
}
@@ -393,26 +391,20 @@ STATIC mp_uint_t sock_read(mp_obj_t self_in, void *buf, mp_uint_t max_len, int *
393
391
394
392
do {
395
393
396
- if (socket -> cur_pkt == NULL ) {
397
- if (socket -> state == STATE_PEER_CLOSED ) {
398
- return 0 ;
399
- }
400
-
401
- DEBUG_printf ("TCP recv: no cur_pkt, getting\n" );
402
- _k_fifo_wait_non_empty (& socket -> recv_q , K_FOREVER );
403
- struct net_pkt * pkt = _k_fifo_peek_head (& socket -> recv_q );
404
- if (pkt == NULL ) {
405
- DEBUG_printf ("TCP recv: NULL return from fifo\n" );
406
- continue ;
407
- }
408
- // Drop head packet from queue
409
- k_fifo_get (& socket -> recv_q , K_NO_WAIT );
394
+ if (socket -> state == STATE_PEER_CLOSED ) {
395
+ return 0 ;
396
+ }
410
397
411
- DEBUG_printf ("TCP recv: new cur_pkt: %p\n" , pkt );
412
- socket -> cur_pkt = pkt ;
398
+ _k_fifo_wait_non_empty (& socket -> recv_q , K_FOREVER );
399
+ struct net_pkt * pkt = _k_fifo_peek_head (& socket -> recv_q );
400
+ if (pkt == NULL ) {
401
+ DEBUG_printf ("TCP recv: NULL return from fifo\n" );
402
+ continue ;
413
403
}
414
404
415
- struct net_buf * frag = socket -> cur_pkt -> frags ;
405
+ DEBUG_printf ("TCP recv: cur_pkt: %p\n" , pkt );
406
+
407
+ struct net_buf * frag = pkt -> frags ;
416
408
if (frag == NULL ) {
417
409
printf ("net_pkt has empty fragments on start!\n" );
418
410
assert (0 );
@@ -430,15 +422,17 @@ STATIC mp_uint_t sock_read(mp_obj_t self_in, void *buf, mp_uint_t max_len, int *
430
422
if (recv_len != frag_len ) {
431
423
net_buf_pull (frag , recv_len );
432
424
} else {
433
- frag = net_pkt_frag_del (socket -> cur_pkt , NULL , frag );
425
+ frag = net_pkt_frag_del (pkt , NULL , frag );
434
426
if (frag == NULL ) {
435
- DEBUG_printf ("Finished processing pkt %p\n" , socket -> cur_pkt );
427
+ DEBUG_printf ("Finished processing pkt %p\n" , pkt );
428
+ // Drop head packet from queue
429
+ k_fifo_get (& socket -> recv_q , K_NO_WAIT );
430
+
436
431
// If "sent" flag was set, it's last packet and we reached EOF
437
- if (net_pkt_sent (socket -> cur_pkt )) {
432
+ if (net_pkt_sent (pkt )) {
438
433
socket -> state = STATE_PEER_CLOSED ;
439
434
}
440
- net_pkt_unref (socket -> cur_pkt );
441
- socket -> cur_pkt = NULL ;
435
+ net_pkt_unref (pkt );
442
436
}
443
437
}
444
438
// Keep repeating while we're getting empty fragments
0 commit comments