summaryrefslogtreecommitdiffstats
path: root/cpukit/libnetworking/netinet/udp_usrreq.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-11-02 14:45:50 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-11-05 11:01:41 +0100
commit8cbd90c51c8fba6ed9ef0e6006334435fdbf97f5 (patch)
treee7142df56c32f4dd9c076605497d81976f61af81 /cpukit/libnetworking/netinet/udp_usrreq.c
parentrtems: Transient event documentation (diff)
downloadrtems-8cbd90c51c8fba6ed9ef0e6006334435fdbf97f5.tar.bz2
libnetworking: Disconnect after mbuf shortage
The missing disconnect left the socket in an unusable state. Each send request resulted in an EISCONN error.
Diffstat (limited to 'cpukit/libnetworking/netinet/udp_usrreq.c')
-rw-r--r--cpukit/libnetworking/netinet/udp_usrreq.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/cpukit/libnetworking/netinet/udp_usrreq.c b/cpukit/libnetworking/netinet/udp_usrreq.c
index 8b56c28bec..e34f6c489c 100644
--- a/cpukit/libnetworking/netinet/udp_usrreq.c
+++ b/cpukit/libnetworking/netinet/udp_usrreq.c
@@ -399,8 +399,11 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct mbuf *addr,
M_PREPEND(m, sizeof(struct udpiphdr), M_DONTWAIT);
if (m == 0) {
error = ENOBUFS;
- if (addr)
+ if (addr) {
+ in_pcbdisconnect(inp);
+ inp->inp_laddr = laddr;
splx(s);
+ }
goto release;
}