mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-12-07 08:02:48 +00:00
netconn: switch gethostbyname to use tcpip_send_msg_wait_sem (task #14523)
This switches netconn_gethostbyname to use tcpip_send_msg_wait_sem to take advantage of core locking support when enabled. tcpip_send_msg_wait_sem handles blocking for the non-core locking case, so we can remove the manual blocking in netconn_gethostbyname. For the core locking case, we need to block if waiting on DNS callback. To achieve this, we unlock the core and wait in lwip_netconn_do_gethostbyname. This is the similar approach that netconn_write takes when it needs to block to continue the write (see lwip_netconn_do_write) This improves performance in the core locking case and is no change for the non-core locking case
This commit is contained in:
@@ -1184,18 +1184,14 @@ netconn_gethostbyname(const char *name, ip_addr_t *addr)
|
||||
}
|
||||
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
|
||||
|
||||
cberr = tcpip_callback(lwip_netconn_do_gethostbyname, &API_VAR_REF(msg));
|
||||
if (cberr != ERR_OK) {
|
||||
#if !LWIP_NETCONN_SEM_PER_THREAD
|
||||
sys_sem_free(API_EXPR_REF(API_VAR_REF(msg).sem));
|
||||
#endif /* !LWIP_NETCONN_SEM_PER_THREAD */
|
||||
API_VAR_FREE(MEMP_DNS_API_MSG, msg);
|
||||
return cberr;
|
||||
}
|
||||
sys_sem_wait(API_EXPR_REF_SEM(API_VAR_REF(msg).sem));
|
||||
cberr = tcpip_send_msg_wait_sem(lwip_netconn_do_gethostbyname, &API_VAR_REF(msg), API_EXPR_REF(API_VAR_REF(msg).sem));
|
||||
#if !LWIP_NETCONN_SEM_PER_THREAD
|
||||
sys_sem_free(API_EXPR_REF(API_VAR_REF(msg).sem));
|
||||
#endif /* !LWIP_NETCONN_SEM_PER_THREAD */
|
||||
if (cberr != ERR_OK) {
|
||||
API_VAR_FREE(MEMP_DNS_API_MSG, msg);
|
||||
return cberr;
|
||||
}
|
||||
|
||||
#if LWIP_MPU_COMPATIBLE
|
||||
*addr = msg->addr;
|
||||
|
||||
Reference in New Issue
Block a user