|Subject:||[lwip-users] R: Re: DNS thread-safe functions|
|Date:||Tue, 4 Feb 2020 11:49:21 +0100 (CET)|
Dear Simon and Ajay,
Thanks you so much for your attention in this matter.
I appreciate your suggestions and I evaluate them carefully. I hope to interpret correctly the three your solutions:
- LOCK_TCPIP_CORE / UNLOCK_TCPIP_CORE. They allow to access in exclusive way to TCIPIP mechanism. However, I don’t want interfere with the regular mechanisms of TCIPIP thread and of operating system;
- tcpip_callback. It allows to call a specific function inside TCPIP thread. However, tcpip_callback doesn’t expect a wait until the end of the function executed in TCPIP thread.
- tcpip_try_callback. As for the
above function, tcpip_try_callback also
allows to call a specific function inside the TCPIP thread. However, tcpip_try_callback doesn’t block when
the request can’t be posted in the tcpip_mbox.
For these reasons I choose to use the tcpip_api_call function. In this way the caller task waits for the TCPIP operation to be completed and the modifications to the existing project are marginal.
I follow the netifapi_netif_set_addr function as example. So, I introduce:
- dnsapi_dns_setserver. Function called from non-TCPIP threads. It passes to TCPIP thread the dnsapi_do_dns_setserver function through the tcpip_api_call function;
- dnsapi_do_dns_setserver. Function called inside the TCPIP thread. It calls the dns_setserver function. So the dns_setserver is executed in thread-safe way;
- dns_server_api_msg. Structure used
to modelized the message passed to TCPIP thread through tcpip_api_call function.
This solution works fine.
At this point I would like to know your position about the use of the tcpip_api_call function instead of your suggestions. Is it an equally acceptable alternative from your point of view?.
You can write a simple wrapper function for DNS setup and use tcpip_callback to call it from TCPIP thread context. There is also tcpip_try_callback.
> Dear all,
> I would like to ask some questions about the thread-safe functions.
> According the http://www.nongnu.org/lwip/2_0_x/pitfalls.html page, in
> the OS mode, all the callback-style APIs function must only be called
> from the TCPIP thread.
> In the OS mode, the functions belongs to NETIF, DHCP, DNS, … modules
> require corresponding thread-safe functions to be used from threads
> different from TCPIP thread.
> For example instead of calling directly the /netif_set_up/ function it’s
> necessary use the /netifapi_netif_set_up/ function, or instead of
> calling directly the /dhcp_start/ function it’s necessary use the
> /netifapi_dhcp_start/ function.
> I am looking for the thread-safe function corresponding to the
> /dns_setserver /function. I am using LwIP 2.1.2, but I don’t find it.
I don't think such a function exists.
> At this point I would know if there is a thread-safe function
> corresponding to the /dns_setserver/ or if I should build a similar
> function myself. In this last case, which function could I take as a model?.
The simple solution would be to enable LWIP_TCPIP_CORE_LOCKING and
surround your call with LOCK_TCPIP_CORE()/UNLOCK_TCPIP_CORE().
> Thanks in advance for your attention and for your suggestions.
lwip-users mailing list
|[Prev in Thread]||Current Thread||[Next in Thread]|