Mercurial > hg > icedtea7-forest-aarch64 > jdk
changeset 7933:22b4d5ebccb3
7010989: Duplicate closure of file descriptors leads to unexpected and incorrect closure of sockets
Reviewed-by: chegar
author | igerasim |
---|---|
date | Tue, 09 Sep 2014 19:02:36 +0400 |
parents | 54503c218de8 |
children | ac93f5941f48 |
files | src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c src/windows/native/java/net/TwoStacksPlainSocketImpl.c src/windows/native/java/net/net_util_md.c |
diffstat | 3 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Tue Sep 09 11:57:07 2014 -0700 +++ b/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Tue Sep 09 19:02:36 2014 +0400 @@ -488,6 +488,9 @@ } } } else { + /* NET_BindV6() closes both sockets upon a failure */ + (*env)->SetObjectField(env, this, pdsi_fdID, NULL); + (*env)->SetObjectField(env, this, pdsi_fd1ID, NULL); NET_ThrowCurrent (env, "Cannot bind"); return; }
--- a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Tue Sep 09 11:57:07 2014 -0700 +++ b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Tue Sep 09 19:02:36 2014 +0400 @@ -468,6 +468,10 @@ (*env)->SetIntField(env, fd1Obj, IO_fd_fdID, fd1); } } + } else { + /* NET_BindV6() closes both sockets upon a failure */ + (*env)->SetObjectField(env, this, psi_fdID, NULL); + (*env)->SetObjectField(env, this, psi_fd1ID, NULL); } } else { rv = NET_WinBind(fd, (struct sockaddr *)&him, len, exclBind);
--- a/src/windows/native/java/net/net_util_md.c Tue Sep 09 11:57:07 2014 -0700 +++ b/src/windows/native/java/net/net_util_md.c Tue Sep 09 19:02:36 2014 +0400 @@ -627,7 +627,7 @@ * and returns SOCKET_ERROR. Used in NET_BindV6 only. */ -#define CLOSE_SOCKETS_AND_RETURN { \ +#define CLOSE_SOCKETS_AND_RETURN do { \ if (fd != -1) { \ closesocket (fd); \ fd = -1; \ @@ -646,7 +646,7 @@ } \ b->ipv4_fd = b->ipv6_fd = -1; \ return SOCKET_ERROR; \ -} +} while(0) /* * if ipv6 is available, call NET_BindV6 to bind to the required address/port.