aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohan Embar <gnustuff@thisiscool.com>2003-11-07 03:13:56 +0000
committerMohan Embar <gnustuff@thisiscool.com>2003-11-07 03:13:56 +0000
commit8588d4cdf789138e60709d1233de8d1d92520dce (patch)
treec9570d50348a6ac911e60fd0d891fb96bfe37fcc
parent2b7deec3d52c42bdda209dfd903fcb553a7b9d7a (diff)
* 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. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@73325 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libjava/ChangeLog15
-rw-r--r--libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc7
-rw-r--r--libjava/gnu/java/net/natPlainSocketImplWin32.cc25
-rw-r--r--libjava/include/win32.h7
-rw-r--r--libjava/java/io/natFileDescriptorWin32.cc8
-rw-r--r--libjava/win32.cc8
6 files changed, 53 insertions, 17 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 6cbae87531d..9b1af441622 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 1098e6158a8..4a4ec986c61 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 96373811936..c1c813ec7ad 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 e169adf9b28..479ed53f00e 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 1891bf78e42..465d7557992 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 3bf1391016e..dfed8c43660 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);
+}