mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
eb4ad71ac1
commit
bbf76ec06c
|
|
@ -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>
|
2003-11-04 Bryce McKinlay <bryce@mckinlay.net.nz>
|
||||||
|
|
||||||
* java/lang/natClass.cc (newInstance): Throw InstantiationException
|
* java/lang/natClass.cc (newInstance): Throw InstantiationException
|
||||||
|
|
|
||||||
|
|
@ -69,11 +69,14 @@ gnu::java::net::PlainDatagramSocketImpl::create ()
|
||||||
_Jv_ThrowSocketException ();
|
_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
|
// We use native_fd in place of fd here. From leaving fd null we avoid
|
||||||
// the double close problem in FileDescriptor.finalize.
|
// the double close problem in FileDescriptor.finalize.
|
||||||
native_fd = (int) sock;
|
native_fd = (jint) hSocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -45,18 +45,21 @@ union SockAddr
|
||||||
void
|
void
|
||||||
gnu::java::net::PlainSocketImpl::create (jboolean stream)
|
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_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
|
// We use native_fd in place of fd here. From leaving fd null we avoid
|
||||||
// the double close problem in FileDescriptor.finalize.
|
// the double close problem in FileDescriptor.finalize.
|
||||||
native_fd = sock;
|
native_fd = (jint) hSocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -230,7 +233,8 @@ gnu::java::net::PlainSocketImpl::accept (gnu::java::net::PlainSocketImpl *s)
|
||||||
{
|
{
|
||||||
union SockAddr u;
|
union SockAddr u;
|
||||||
socklen_t addrlen = sizeof(u);
|
socklen_t addrlen = sizeof(u);
|
||||||
int new_socket = 0;
|
HANDLE hSocket = 0;
|
||||||
|
SOCKET new_socket = 0;
|
||||||
|
|
||||||
if (timeout > 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);
|
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
|
// This new child socket is nonblocking because the parent
|
||||||
// socket became nonblocking via the WSAEventSelect() call,
|
// 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);
|
new_socket = ::accept (native_fd, (sockaddr*) &u, &addrlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_socket == int(INVALID_SOCKET))
|
if (new_socket == INVALID_SOCKET)
|
||||||
goto error;
|
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;
|
jbyteArray raddr;
|
||||||
jint rport;
|
jint rport;
|
||||||
|
|
@ -308,7 +315,7 @@ gnu::java::net::PlainSocketImpl::accept (gnu::java::net::PlainSocketImpl *s)
|
||||||
else
|
else
|
||||||
throw new ::java::net::SocketException (JvNewStringUTF ("invalid family"));
|
throw new ::java::net::SocketException (JvNewStringUTF ("invalid family"));
|
||||||
|
|
||||||
s->native_fd = new_socket;
|
s->native_fd = (jint) hSocket;
|
||||||
s->localport = localport;
|
s->localport = localport;
|
||||||
s->address = new ::java::net::InetAddress (raddr, NULL);
|
s->address = new ::java::net::InetAddress (raddr, NULL);
|
||||||
s->port = rport;
|
s->port = rport;
|
||||||
|
|
|
||||||
|
|
@ -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_select (int n, fd_set *, fd_set *, fd_set *, struct timeval *);
|
||||||
extern int _Jv_pipe (int filedes[2]);
|
extern int _Jv_pipe (int filedes[2]);
|
||||||
|
|
||||||
inline void
|
extern void
|
||||||
_Jv_platform_close_on_exec (jint)
|
_Jv_platform_close_on_exec (HANDLE h);
|
||||||
{
|
|
||||||
// Ignore.
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef JV_HASH_SYNCHRONIZATION
|
#ifdef JV_HASH_SYNCHRONIZATION
|
||||||
/* Suspends the execution of the current thread for the specified
|
/* Suspends the execution of the current thread for the specified
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,13 @@ java::io::FileDescriptor::open (jstring path, jint jflags) {
|
||||||
throw new FileNotFoundException (_Jv_WinStrError (cpath, dwErrorCode));
|
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
|
void
|
||||||
|
|
|
||||||
|
|
@ -363,3 +363,11 @@ _Jv_pipe (int filedes[2])
|
||||||
{
|
{
|
||||||
return _pipe (filedes, 4096, _O_BINARY);
|
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);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue