lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lwip-users] Assertion "pcb->snd_queuelen >= pbuf_clen(next->p)" in


From: address@hidden
Subject: Re: [lwip-users] Assertion "pcb->snd_queuelen >= pbuf_clen(next->p)" in tcp_free_acked_segments()
Date: Thu, 22 Apr 2021 11:10:49 +0200
User-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.1

Am 22.04.2021 um 09:53 schrieb Tomas Mudrunka:
>>>    p = pbuf_alloc(PBUF_RAW,rx_len,PBUF_POOL);
>>>    pbuf_take(p, rx_buf, rx_len);
>>> + LOCK_TCPIP_CORE();
>>>    if(netif->input(p, netif) != ERR_OK) {
>>>      ESP_LOGE(TAG, "Input failed!");
>>>      pbuf_free(p);
>>>    }
>>> + UNLOCK_TCPIP_CORE();
>>>
>>
>> I'm not sure you even need this. What's the function behind the
>> netif->input pointer?
>
> It is tcpip_input(), but LWIP_TCPIP_CORE_LOCKING is globaly disabled by
> defines.
> Only SYS_LIGHTWEIGHT_PROT is enabled.
>

But you don't need LWIP_TCPIP_CORE_LOCKING. Traditionally, all code runs
inside a single thread. If you want to call lwIP core functions, you'd
set up a message that gets some function called in this thread context.
This way, you don't need locking, as everything is called sequentially
from only one thread.

LWIP_TCPIP_CORE_LOCKING is a different mechanism: instead of queueing a
call to be done in another thread, you grab a global mutex and do the
call right away. Most times, this better fits to realtime requirements
than the traditional mechanism.

However, you don't need a lock when netif->input is tcpip_input.
tcpip_input is a function dedicated to be called from other stacks to
queue input pbufs for the lwIP thread.

Regards,
Simon



reply via email to

[Prev in Thread] Current Thread [Next in Thread]