diff options
author | Mohan Embar <gnustuff@thisiscool.com> | 2003-11-07 03:13:56 +0000 |
---|---|---|
committer | Mohan Embar <membar@gcc.gnu.org> | 2003-11-07 03:13:56 +0000 |
commit | bbf76ec06cbb846464bbb3701280167d0319b47b (patch) | |
tree | c9570d50348a6ac911e60fd0d891fb96bfe37fcc | |
parent | eb4ad71ac1d151524c097e7f956d44b3b7eafd52 (diff) | |
download | gcc-bbf76ec06cbb846464bbb3701280167d0319b47b.zip gcc-bbf76ec06cbb846464bbb3701280167d0319b47b.tar.gz gcc-bbf76ec06cbb846464bbb3701280167d0319b47b.tar.bz2 |
win32.h (_Jv_platform_close_on_exec): Changed signature and declared extern.
* include/win32.h (_Jv_platform_close_on_exec): Changed
signature and declared extern.
* win32.cc (_Jv_platform_close_on_exec): Implemented.
* gnu/java/net/natPlainDatagramSocketImplWin32.cc
(create): Use new signature of _Jv_platform_close_on_exec.
* gnu/java/net/natPlainSocketImplWin32.cc
(create): Eliminated a few typecasts
Use new signature of _Jv_platform_close_on_exec.
(accept): Eliminated a few typecasts
Use new signature of _Jv_platform_close_on_exec.
* java/io/natFileDescriptorWin32.cc (open): Use
_Jv_platform_close_on_exec.
From-SVN: r73325
-rw-r--r-- | libjava/ChangeLog | 15 | ||||
-rw-r--r-- | libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc | 7 | ||||
-rw-r--r-- | libjava/gnu/java/net/natPlainSocketImplWin32.cc | 25 | ||||
-rw-r--r-- | libjava/include/win32.h | 7 | ||||
-rw-r--r-- | libjava/java/io/natFileDescriptorWin32.cc | 8 | ||||
-rw-r--r-- | libjava/win32.cc | 8 |
6 files changed, 53 insertions, 17 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 6cbae87..9b1af44 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,18 @@ +2003-11-06 Mohan Embar <gnustuff@thisiscool.com> + + * include/win32.h (_Jv_platform_close_on_exec): Changed + signature and declared extern. + * win32.cc (_Jv_platform_close_on_exec): Implemented. + * gnu/java/net/natPlainDatagramSocketImplWin32.cc + (create): Use new signature of _Jv_platform_close_on_exec. + * gnu/java/net/natPlainSocketImplWin32.cc + (create): Eliminated a few typecasts + Use new signature of _Jv_platform_close_on_exec. + (accept): Eliminated a few typecasts + Use new signature of _Jv_platform_close_on_exec. + * java/io/natFileDescriptorWin32.cc (open): Use + _Jv_platform_close_on_exec. + 2003-11-04 Bryce McKinlay <bryce@mckinlay.net.nz> * java/lang/natClass.cc (newInstance): Throw InstantiationException diff --git a/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc b/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc index 1098e61..4a4ec98 100644 --- a/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc +++ b/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc @@ -69,11 +69,14 @@ gnu::java::net::PlainDatagramSocketImpl::create () _Jv_ThrowSocketException (); } - _Jv_platform_close_on_exec (sock); + // Cast this to a HANDLE so we can make + // it non-inheritable via _Jv_platform_close_on_exec. + HANDLE hSocket = (HANDLE) sock; + _Jv_platform_close_on_exec (hSocket); // We use native_fd in place of fd here. From leaving fd null we avoid // the double close problem in FileDescriptor.finalize. - native_fd = (int) sock; + native_fd = (jint) hSocket; } void diff --git a/libjava/gnu/java/net/natPlainSocketImplWin32.cc b/libjava/gnu/java/net/natPlainSocketImplWin32.cc index 9637381..c1c813e 100644 --- a/libjava/gnu/java/net/natPlainSocketImplWin32.cc +++ b/libjava/gnu/java/net/natPlainSocketImplWin32.cc @@ -45,18 +45,21 @@ union SockAddr void gnu::java::net::PlainSocketImpl::create (jboolean stream) { - int sock = ::socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); + SOCKET sock = ::socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0); - if (sock == int(INVALID_SOCKET)) + if (sock == INVALID_SOCKET) { _Jv_ThrowIOException (); } - _Jv_platform_close_on_exec (sock); + // Cast this to a HANDLE so we can make + // it non-inheritable via _Jv_platform_close_on_exec. + HANDLE hSocket = (HANDLE) sock; + _Jv_platform_close_on_exec (hSocket); // We use native_fd in place of fd here. From leaving fd null we avoid // the double close problem in FileDescriptor.finalize. - native_fd = sock; + native_fd = (jint) hSocket; } void @@ -230,7 +233,8 @@ gnu::java::net::PlainSocketImpl::accept (gnu::java::net::PlainSocketImpl *s) { union SockAddr u; socklen_t addrlen = sizeof(u); - int new_socket = 0; + HANDLE hSocket = 0; + SOCKET new_socket = 0; if (timeout > 0) { @@ -245,7 +249,7 @@ gnu::java::net::PlainSocketImpl::accept (gnu::java::net::PlainSocketImpl *s) { new_socket = ::accept (native_fd, (sockaddr*) &u, &addrlen); - if (new_socket != int(INVALID_SOCKET)) + if (new_socket != INVALID_SOCKET) { // This new child socket is nonblocking because the parent // socket became nonblocking via the WSAEventSelect() call, @@ -284,10 +288,13 @@ gnu::java::net::PlainSocketImpl::accept (gnu::java::net::PlainSocketImpl *s) new_socket = ::accept (native_fd, (sockaddr*) &u, &addrlen); } - if (new_socket == int(INVALID_SOCKET)) + if (new_socket == INVALID_SOCKET) goto error; - _Jv_platform_close_on_exec (new_socket); + // Cast this to a HANDLE so we can make + // it non-inheritable via _Jv_platform_close_on_exec. + hSocket = (HANDLE) new_socket; + _Jv_platform_close_on_exec (hSocket); jbyteArray raddr; jint rport; @@ -308,7 +315,7 @@ gnu::java::net::PlainSocketImpl::accept (gnu::java::net::PlainSocketImpl *s) else throw new ::java::net::SocketException (JvNewStringUTF ("invalid family")); - s->native_fd = new_socket; + s->native_fd = (jint) hSocket; s->localport = localport; s->address = new ::java::net::InetAddress (raddr, NULL); s->port = rport; diff --git a/libjava/include/win32.h b/libjava/include/win32.h index e169adf..479ed53 100644 --- a/libjava/include/win32.h +++ b/libjava/include/win32.h @@ -97,11 +97,8 @@ extern jlong _Jv_platform_gettimeofday (); extern int _Jv_select (int n, fd_set *, fd_set *, fd_set *, struct timeval *); extern int _Jv_pipe (int filedes[2]); -inline void -_Jv_platform_close_on_exec (jint) -{ - // Ignore. -} +extern void +_Jv_platform_close_on_exec (HANDLE h); #ifdef JV_HASH_SYNCHRONIZATION /* Suspends the execution of the current thread for the specified diff --git a/libjava/java/io/natFileDescriptorWin32.cc b/libjava/java/io/natFileDescriptorWin32.cc index 1891bf7..465d755 100644 --- a/libjava/java/io/natFileDescriptorWin32.cc +++ b/libjava/java/io/natFileDescriptorWin32.cc @@ -133,7 +133,13 @@ java::io::FileDescriptor::open (jstring path, jint jflags) { throw new FileNotFoundException (_Jv_WinStrError (cpath, dwErrorCode)); } } - return (jint)handle; + + // Make this handle non-inheritable so that child + // processes don't inadvertently prevent us from + // closing this file. + _Jv_platform_close_on_exec (handle); + + return (jint) handle; } void diff --git a/libjava/win32.cc b/libjava/win32.cc index 3bf1391..dfed8c4 100644 --- a/libjava/win32.cc +++ b/libjava/win32.cc @@ -363,3 +363,11 @@ _Jv_pipe (int filedes[2]) { return _pipe (filedes, 4096, _O_BINARY); } + +void +_Jv_platform_close_on_exec (HANDLE h) +{ + // Mark the handle as non-inheritable. This has + // no effect under Win9X. + SetHandleInformation (h, HANDLE_FLAG_INHERIT, 0); +} |