mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-01 04:12:07 +00:00
api_msg.c: Fix bug #20318: api_msg "recv" callbacks don't call pbuf_free in all error cases.
This commit is contained in:
parent
a891854ef5
commit
6a452951f5
@ -241,6 +241,10 @@ HISTORY
|
|||||||
|
|
||||||
++ Bug fixes:
|
++ Bug fixes:
|
||||||
|
|
||||||
|
2007-07-13 Frédéric Bernon
|
||||||
|
* api_msg.c: Fix bug #20318: api_msg "recv" callbacks don't call pbuf_free in
|
||||||
|
all error cases.
|
||||||
|
|
||||||
2007-07-13 Frédéric Bernon
|
2007-07-13 Frédéric Bernon
|
||||||
* api_msg.c: Fix bug #20315: possible memory leak problem if tcp_listen failed,
|
* api_msg.c: Fix bug #20315: possible memory leak problem if tcp_listen failed,
|
||||||
because current code doesn't follow rawapi.txt documentation.
|
because current code doesn't follow rawapi.txt documentation.
|
||||||
|
@ -62,10 +62,8 @@ recv_raw(void *arg, struct raw_pcb *pcb, struct pbuf *p,
|
|||||||
struct netconn *conn;
|
struct netconn *conn;
|
||||||
|
|
||||||
conn = arg;
|
conn = arg;
|
||||||
if (!conn)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (conn->recvmbox != SYS_MBOX_NULL) {
|
if ((conn != NULL) && (conn->recvmbox != SYS_MBOX_NULL)) {
|
||||||
if (!(buf = memp_malloc(MEMP_NETBUF))) {
|
if (!(buf = memp_malloc(MEMP_NETBUF))) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -104,12 +102,11 @@ recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
|
|||||||
|
|
||||||
conn = arg;
|
conn = arg;
|
||||||
|
|
||||||
if (conn == NULL) {
|
if ((conn == NULL) || (conn->recvmbox == SYS_MBOX_NULL)) {
|
||||||
pbuf_free(p);
|
pbuf_free(p);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conn->recvmbox != SYS_MBOX_NULL) {
|
|
||||||
buf = memp_malloc(MEMP_NETBUF);
|
buf = memp_malloc(MEMP_NETBUF);
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
pbuf_free(p);
|
pbuf_free(p);
|
||||||
@ -126,7 +123,6 @@ recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
|
|||||||
if (conn->callback)
|
if (conn->callback)
|
||||||
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len);
|
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len);
|
||||||
sys_mbox_post(conn->recvmbox, buf);
|
sys_mbox_post(conn->recvmbox, buf);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif /* LWIP_UDP */
|
#endif /* LWIP_UDP */
|
||||||
|
|
||||||
@ -147,12 +143,11 @@ recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
|
|||||||
|
|
||||||
conn = arg;
|
conn = arg;
|
||||||
|
|
||||||
if (conn == NULL) {
|
if ((conn == NULL) || (conn->recvmbox == SYS_MBOX_NULL)) {
|
||||||
pbuf_free(p);
|
pbuf_free(p);
|
||||||
return ERR_VAL;
|
return ERR_VAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conn->recvmbox != SYS_MBOX_NULL) {
|
|
||||||
conn->err = err;
|
conn->err = err;
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
len = p->tot_len;
|
len = p->tot_len;
|
||||||
@ -164,7 +159,7 @@ recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
|
|||||||
if (conn->callback)
|
if (conn->callback)
|
||||||
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, len);
|
(*conn->callback)(conn, NETCONN_EVT_RCVPLUS, len);
|
||||||
sys_mbox_post(conn->recvmbox, p);
|
sys_mbox_post(conn->recvmbox, p);
|
||||||
}
|
|
||||||
return ERR_OK;
|
return ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user