From 1d7996dc471241c7994a2c3e36118a0531180977 Mon Sep 17 00:00:00 2001 From: Dirk Ziegelmeier Date: Sun, 13 Mar 2016 19:43:49 +0100 Subject: [PATCH] tcpip API calls: Implement LWIP_NETCONN_SEM_PER_THREAD support for ALL API calls --- src/api/tcpip.c | 14 ++++++++++++++ src/include/lwip/priv/tcpip_priv.h | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/src/api/tcpip.c b/src/api/tcpip.c index 54c7f77f..3426753d 100644 --- a/src/api/tcpip.c +++ b/src/api/tcpip.c @@ -106,7 +106,11 @@ tcpip_thread(void *arg) case TCPIP_MSG_API_CALL: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API CALL message %p\n", (void *)msg)); msg->msg.api_call->err = msg->msg.api_call->function(msg->msg.api_call); +#if LWIP_NETCONN_SEM_PER_THREAD + sys_sem_signal(msg->msg.api_call->sem); +#else /* LWIP_NETCONN_SEM_PER_THREAD */ sys_sem_signal(&msg->msg.api_call->sem); +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ break; #endif /* LWIP_TCPIP_CORE_LOCKING */ @@ -320,6 +324,8 @@ tcpip_untimeout(sys_timeout_handler h, void *arg) err_t tcpip_send_api_msg(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem) { + LWIP_ASSERT("semaphore not initialized", sys_sem_valid(sem)); + if (sys_mbox_valid_val(mbox)) { TCPIP_MSG_VAR_DECLARE(msg); @@ -349,18 +355,26 @@ err_t tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call *call) TCPIP_MSG_VAR_DECLARE(msg); err_t err; +#if LWIP_NETCONN_SEM_PER_THREAD + call->sem = LWIP_NETCONN_THREAD_SEM_GET(); +#else /* LWIP_NETCONN_SEM_PER_THREAD */ err = sys_sem_new(&call->sem, 0); if (err != ERR_OK) { return err; } +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ TCPIP_MSG_VAR_ALLOC(msg); TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API_CALL; TCPIP_MSG_VAR_REF(msg).msg.api_call = call; TCPIP_MSG_VAR_REF(msg).msg.api_call->function = fn; sys_mbox_post(&mbox, &TCPIP_MSG_VAR_REF(msg)); +#if LWIP_NETCONN_SEM_PER_THREAD + sys_arch_sem_wait(call->sem, 0); +#else /* LWIP_NETCONN_SEM_PER_THREAD */ sys_arch_sem_wait(&call->sem, 0); sys_sem_free(&call->sem); +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ TCPIP_MSG_VAR_FREE(msg); return ERR_OK; } diff --git a/src/include/lwip/priv/tcpip_priv.h b/src/include/lwip/priv/tcpip_priv.h index 5b2b924a..cc1c54eb 100644 --- a/src/include/lwip/priv/tcpip_priv.h +++ b/src/include/lwip/priv/tcpip_priv.h @@ -105,7 +105,11 @@ struct tcpip_api_call { tcpip_api_call_fn function; #if !LWIP_TCPIP_CORE_LOCKING +#if LWIP_NETCONN_SEM_PER_THREAD + sys_sem_t *sem; +#else /* LWIP_NETCONN_SEM_PER_THREAD */ sys_sem_t sem; +#endif /* LWIP_NETCONN_SEM_PER_THREAD */ err_t err; #endif /* !LWIP_TCPIP_CORE_LOCKING */ };