mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-01-30 03:32:50 +00:00
tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field netconn::sem per netconn::op_completed like suggested for the task #7490 "Add return value to sys_mbox_post".
This commit is contained in:
parent
9906e4c984
commit
55bcc20deb
@ -19,6 +19,11 @@ HISTORY
|
||||
|
||||
++ New features:
|
||||
|
||||
2008-01-12 Frédéric Bernon
|
||||
* tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field
|
||||
netconn::sem per netconn::op_completed like suggested for the task #7490
|
||||
"Add return value to sys_mbox_post".
|
||||
|
||||
2008-01-12 Frédéric Bernon
|
||||
* api_msg.c, opt.h: replace DEFAULT_RECVMBOX_SIZE per DEFAULT_TCP_RECVMBOX_SIZE,
|
||||
DEFAULT_UDP_RECVMBOX_SIZE and DEFAULT_RAW_RECVMBOX_SIZE (to optimize queues
|
||||
|
@ -79,10 +79,10 @@ netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, netconn_cal
|
||||
|
||||
if (conn->err != ERR_OK) {
|
||||
LWIP_ASSERT("freeing conn without freeing pcb", conn->pcb.tcp == NULL);
|
||||
LWIP_ASSERT("conn has no sem", conn->sem != SYS_SEM_NULL);
|
||||
LWIP_ASSERT("conn has no op_completed", conn->op_completed != SYS_SEM_NULL);
|
||||
LWIP_ASSERT("conn has no recvmbox", conn->recvmbox != SYS_MBOX_NULL);
|
||||
LWIP_ASSERT("conn->acceptmbox shouldn't exist", conn->acceptmbox == SYS_MBOX_NULL);
|
||||
sys_sem_free(conn->sem);
|
||||
sys_sem_free(conn->op_completed);
|
||||
sys_mbox_free(conn->recvmbox);
|
||||
memp_free(MEMP_NETCONN, conn);
|
||||
return NULL;
|
||||
|
@ -282,9 +282,9 @@ err_tcp(void *arg, err_t err)
|
||||
API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
|
||||
sys_mbox_post(conn->recvmbox, NULL);
|
||||
}
|
||||
if (conn->sem != SYS_SEM_NULL && conn->state == NETCONN_CONNECT) {
|
||||
if (conn->op_completed != SYS_SEM_NULL && conn->state == NETCONN_CONNECT) {
|
||||
conn->state = NETCONN_NONE;
|
||||
sys_sem_signal(conn->sem);
|
||||
sys_sem_signal(conn->op_completed);
|
||||
}
|
||||
if (conn->acceptmbox != SYS_MBOX_NULL) {
|
||||
/* Register event with callback */
|
||||
@ -296,7 +296,7 @@ err_tcp(void *arg, err_t err)
|
||||
since the pcb has already been deleted! */
|
||||
conn->state = NETCONN_NONE;
|
||||
/* wake up the waiting task */
|
||||
sys_sem_signal(conn->sem);
|
||||
sys_sem_signal(conn->op_completed);
|
||||
}
|
||||
}
|
||||
|
||||
@ -497,12 +497,12 @@ netconn_alloc(enum netconn_type t, netconn_callback callback)
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((conn->sem = sys_sem_new(0)) == SYS_SEM_NULL) {
|
||||
if ((conn->op_completed = sys_sem_new(0)) == SYS_SEM_NULL) {
|
||||
memp_free(MEMP_NETCONN, conn);
|
||||
return NULL;
|
||||
}
|
||||
if ((conn->recvmbox = sys_mbox_new(size)) == SYS_MBOX_NULL) {
|
||||
sys_sem_free(conn->sem);
|
||||
sys_sem_free(conn->op_completed);
|
||||
memp_free(MEMP_NETCONN, conn);
|
||||
return NULL;
|
||||
}
|
||||
@ -558,8 +558,8 @@ netconn_free(struct netconn *conn)
|
||||
conn->acceptmbox = SYS_MBOX_NULL;
|
||||
}
|
||||
|
||||
sys_sem_free(conn->sem);
|
||||
conn->sem = SYS_SEM_NULL;
|
||||
sys_sem_free(conn->op_completed);
|
||||
conn->op_completed = SYS_SEM_NULL;
|
||||
|
||||
memp_free(MEMP_NETCONN, conn);
|
||||
}
|
||||
@ -607,7 +607,7 @@ do_close_internal(struct netconn *conn)
|
||||
API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
|
||||
API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
|
||||
/* wake up the application task */
|
||||
sys_sem_signal(conn->sem);
|
||||
sys_sem_signal(conn->op_completed);
|
||||
}
|
||||
/* If closing didn't succeed, we get called again either
|
||||
from poll_tcp or from sent_tcp */
|
||||
@ -655,8 +655,8 @@ do_delconn(struct api_msg_msg *msg)
|
||||
API_EVENT(msg->conn, NETCONN_EVT_RCVPLUS, 0);
|
||||
API_EVENT(msg->conn, NETCONN_EVT_SENDPLUS, 0);
|
||||
|
||||
if (msg->conn->sem != SYS_SEM_NULL) {
|
||||
sys_sem_signal(msg->conn->sem);
|
||||
if (msg->conn->op_completed != SYS_SEM_NULL) {
|
||||
sys_sem_signal(msg->conn->op_completed);
|
||||
}
|
||||
}
|
||||
|
||||
@ -724,7 +724,7 @@ do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
|
||||
setup_tcp(conn);
|
||||
}
|
||||
conn->state = NETCONN_NONE;
|
||||
sys_sem_signal(conn->sem);
|
||||
sys_sem_signal(conn->op_completed);
|
||||
return ERR_OK;
|
||||
}
|
||||
#endif /* LWIP_TCP */
|
||||
@ -740,7 +740,7 @@ void
|
||||
do_connect(struct api_msg_msg *msg)
|
||||
{
|
||||
if (msg->conn->pcb.tcp == NULL) {
|
||||
sys_sem_signal(msg->conn->sem);
|
||||
sys_sem_signal(msg->conn->op_completed);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -748,13 +748,13 @@ do_connect(struct api_msg_msg *msg)
|
||||
#if LWIP_RAW
|
||||
case NETCONN_RAW:
|
||||
msg->conn->err = raw_connect(msg->conn->pcb.raw, msg->msg.bc.ipaddr);
|
||||
sys_sem_signal(msg->conn->sem);
|
||||
sys_sem_signal(msg->conn->op_completed);
|
||||
break;
|
||||
#endif /* LWIP_RAW */
|
||||
#if LWIP_UDP
|
||||
case NETCONN_UDP:
|
||||
msg->conn->err = udp_connect(msg->conn->pcb.udp, msg->msg.bc.ipaddr, msg->msg.bc.port);
|
||||
sys_sem_signal(msg->conn->sem);
|
||||
sys_sem_signal(msg->conn->op_completed);
|
||||
break;
|
||||
#endif /* LWIP_UDP */
|
||||
#if LWIP_TCP
|
||||
@ -983,7 +983,7 @@ do_writemore(struct netconn *conn)
|
||||
if (conn->write_delayed != 0)
|
||||
#endif
|
||||
{
|
||||
sys_sem_signal(conn->sem);
|
||||
sys_sem_signal(conn->op_completed);
|
||||
}
|
||||
}
|
||||
#if LWIP_TCPIP_CORE_LOCKING
|
||||
@ -1015,7 +1015,7 @@ do_write(struct api_msg_msg *msg)
|
||||
if (do_writemore(msg->conn) != ERR_OK) {
|
||||
LWIP_ASSERT("state!", msg->conn->state == NETCONN_WRITE);
|
||||
UNLOCK_TCPIP_CORE();
|
||||
sys_arch_sem_wait(msg->conn->sem, 0);
|
||||
sys_arch_sem_wait(msg->conn->op_completed, 0);
|
||||
LOCK_TCPIP_CORE();
|
||||
LWIP_ASSERT("state!", msg->conn->state == NETCONN_NONE);
|
||||
}
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "lwip/igmp.h"
|
||||
#include "lwip/inet.h"
|
||||
#include "lwip/tcp.h"
|
||||
#include "lwip/raw.h"
|
||||
#include "lwip/udp.h"
|
||||
#include "lwip/tcpip.h"
|
||||
|
||||
@ -1301,7 +1302,7 @@ lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
|
||||
data.optlen = optlen;
|
||||
data.err = err;
|
||||
tcpip_callback(lwip_getsockopt_internal, &data);
|
||||
sys_arch_sem_wait(sock->conn->sem, 0);
|
||||
sys_arch_sem_wait(sock->conn->op_completed, 0);
|
||||
/* maybe lwip_getsockopt_internal has changed err */
|
||||
err = data.err;
|
||||
|
||||
@ -1485,7 +1486,7 @@ lwip_getsockopt_internal(void *arg)
|
||||
break;
|
||||
#endif /* LWIP_UDP */
|
||||
} /* switch (level) */
|
||||
sys_sem_signal(sock->conn->sem);
|
||||
sys_sem_signal(sock->conn->op_completed);
|
||||
}
|
||||
|
||||
int
|
||||
@ -1675,7 +1676,7 @@ lwip_setsockopt(int s, int level, int optname, const void *optval, socklen_t opt
|
||||
data.optlen = &optlen;
|
||||
data.err = err;
|
||||
tcpip_callback(lwip_setsockopt_internal, &data);
|
||||
sys_arch_sem_wait(sock->conn->sem, 0);
|
||||
sys_arch_sem_wait(sock->conn->op_completed, 0);
|
||||
/* maybe lwip_setsockopt_internal has changed err */
|
||||
err = data.err;
|
||||
|
||||
@ -1859,7 +1860,7 @@ lwip_setsockopt_internal(void *arg)
|
||||
break;
|
||||
#endif /* LWIP_UDP */
|
||||
} /* switch (level) */
|
||||
sys_sem_signal(sock->conn->sem);
|
||||
sys_sem_signal(sock->conn->op_completed);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -418,7 +418,7 @@ tcpip_apimsg(struct api_msg *apimsg)
|
||||
msg.type = TCPIP_MSG_API;
|
||||
msg.msg.apimsg = apimsg;
|
||||
sys_mbox_post(mbox, &msg);
|
||||
sys_arch_sem_wait(apimsg->msg.conn->sem, 0);
|
||||
sys_arch_sem_wait(apimsg->msg.conn->op_completed, 0);
|
||||
return ERR_OK;
|
||||
}
|
||||
return ERR_VAL;
|
||||
|
@ -119,7 +119,7 @@ struct netconn {
|
||||
/** the last error this netconn had */
|
||||
err_t err;
|
||||
/** sem that is used to synchroneously execute functions in the core context */
|
||||
sys_sem_t sem;
|
||||
sys_sem_t op_completed;
|
||||
/** mbox where received packets are stored until they are fetched
|
||||
by the netconn application thread (can grow quite big) */
|
||||
sys_mbox_t recvmbox;
|
||||
|
@ -59,7 +59,7 @@ extern sys_sem_t lock_tcpip_core;
|
||||
#define LOCK_TCPIP_CORE()
|
||||
#define UNLOCK_TCPIP_CORE()
|
||||
#define TCPIP_APIMSG(m) tcpip_apimsg(m)
|
||||
#define TCPIP_APIMSG_ACK(m) sys_sem_signal(m->conn->sem)
|
||||
#define TCPIP_APIMSG_ACK(m) sys_sem_signal(m->conn->op_completed)
|
||||
#define TCPIP_NETIFAPI(m) tcpip_netifapi(m)
|
||||
#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(m->sem)
|
||||
#endif /* LWIP_TCPIP_CORE_LOCKING */
|
||||
|
Loading…
x
Reference in New Issue
Block a user