This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Patch: gnu.java.net.PlainDatagramSocketImpl
- From: Michael Koch <konqueror at gmx dot de>
- To: java-patches at gcc dot gnu dot org
- Date: Thu, 11 Mar 2004 17:42:01 +0100
- Subject: Patch: gnu.java.net.PlainDatagramSocketImpl
Hi list,
I just looked into merging gnu.java.net.PlainDatagramSocketImpl more
with classpath. I dont if there are better ways in CNI then this.
Any comments ? Okay for trunk ?
Michael
Index: gnu/java/net/PlainDatagramSocketImpl.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/PlainDatagramSocketImpl.java,v
retrieving revision 1.5
diff -u -b -B -r1.5 PlainDatagramSocketImpl.java
--- gnu/java/net/PlainDatagramSocketImpl.java 11 Mar 2004 08:47:52 -0000 1.5
+++ gnu/java/net/PlainDatagramSocketImpl.java 11 Mar 2004 16:40:11 -0000
@@ -60,8 +60,8 @@
* It makes native calls to C routines that implement BSD style
* SOCK_DGRAM sockets in the AF_INET family.
*
- * @author Aaron M. Renn <arenn@urbanophile.com>
- * @author Warren Levy <warrenl@cygnus.com>
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ * @author Warren Levy (warrenl@cygnus.com)
*/
public final class PlainDatagramSocketImpl extends DatagramSocketImpl
{
@@ -96,6 +96,16 @@
*/
int native_fd = -1;
+ /**
+ * Lock object to serialize threads wanting to receive
+ */
+ private final Object RECEIVE_LOCK = new Object();
+
+ /**
+ * Lock object to serialize threads wanting to send
+ */
+ private final Object SEND_LOCK = new Object();
+
// FIXME: Is this necessary? Could it help w/ DatagramSocket.getLocalAddress?
// InetAddress address;
@@ -179,7 +189,23 @@
*
* @exception IOException If an error occurs
*/
- protected native void send(DatagramPacket p) throws IOException;
+ private native void send0(DatagramPacket packet)
+ throws IOException;
+
+ /**
+ * Sends a packet of data to a remote host
+ *
+ * @param packet The packet to send
+ *
+ * @exception IOException If an error occurs
+ */
+ protected void send(DatagramPacket packet) throws IOException
+ {
+ synchronized (SEND_LOCK)
+ {
+ send0(packet);
+ }
+ }
/**
* Receives a UDP packet from the network
@@ -188,7 +214,23 @@
*
* @exception IOException IOException If an error occurs
*/
- protected native void receive(DatagramPacket packet) throws IOException;
+ protected void receive(DatagramPacket packet)
+ throws IOException
+ {
+ synchronized (RECEIVE_LOCK)
+ {
+ receive0(packet);
+ }
+ }
+
+ /**
+ * Native call to receive a UDP packet from the network
+ *
+ * @param packet The packet to fill in with the data received
+ *
+ * @exception IOException IOException If an error occurs
+ */
+ private native void receive0(DatagramPacket packet) throws IOException;
/**
* Sets the value of an option on the socket
Index: gnu/java/net/natPlainDatagramSocketImplNoNet.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/natPlainDatagramSocketImplNoNet.cc,v
retrieving revision 1.1
diff -u -b -B -r1.1 natPlainDatagramSocketImplNoNet.cc
--- gnu/java/net/natPlainDatagramSocketImplNoNet.cc 10 Sep 2003 17:39:20 -0000 1.1
+++ gnu/java/net/natPlainDatagramSocketImplNoNet.cc 11 Mar 2004 16:40:11 -0000
@@ -68,14 +68,14 @@
}
void
-gnu::java::net::PlainDatagramSocketImpl::send (::java::net::DatagramPacket *)
+gnu::java::net::PlainDatagramSocketImpl::send0 (::java::net::DatagramPacket *)
{
throw new ::java::io::IOException (
JvNewStringLatin1 ("DatagramSocketImpl.send: unimplemented"));
}
void
-gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *)
+gnu::java::net::PlainDatagramSocketImpl::receive0 (::java::net::DatagramPacket *)
{
throw new ::java::io::IOException (
JvNewStringLatin1 ("DatagramSocketImpl.receive: unimplemented"));
Index: gnu/java/net/natPlainDatagramSocketImplPosix.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc,v
retrieving revision 1.6
diff -u -b -B -r1.6 natPlainDatagramSocketImplPosix.cc
--- gnu/java/net/natPlainDatagramSocketImplPosix.cc 16 Dec 2003 22:47:53 -0000 1.6
+++ gnu/java/net/natPlainDatagramSocketImplPosix.cc 11 Mar 2004 16:40:11 -0000
@@ -284,7 +284,7 @@
}
void
-gnu::java::net::PlainDatagramSocketImpl::send (::java::net::DatagramPacket *p)
+gnu::java::net::PlainDatagramSocketImpl::send0 (::java::net::DatagramPacket *p)
{
// FIXME: Deal with Multicast and if the socket is connected.
jint rport = p->getPort();
@@ -325,7 +325,7 @@
}
void
-gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p)
+gnu::java::net::PlainDatagramSocketImpl::receive0 (::java::net::DatagramPacket *p)
{
// FIXME: Deal with Multicast and if the socket is connected.
union SockAddr u;
Index: gnu/java/net/natPlainDatagramSocketImplWin32.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/natPlainDatagramSocketImplWin32.cc,v
retrieving revision 1.7
diff -u -b -B -r1.7 natPlainDatagramSocketImplWin32.cc
--- gnu/java/net/natPlainDatagramSocketImplWin32.cc 16 Dec 2003 22:57:06 -0000 1.7
+++ gnu/java/net/natPlainDatagramSocketImplWin32.cc 11 Mar 2004 16:40:11 -0000
@@ -271,7 +271,7 @@
}
void
-gnu::java::net::PlainDatagramSocketImpl::send (::java::net::DatagramPacket *p)
+gnu::java::net::PlainDatagramSocketImpl::send0 (::java::net::DatagramPacket *p)
{
// FIXME: Deal with Multicast and if the socket is connected.
jint rport = p->getPort();
@@ -311,7 +311,7 @@
}
void
-gnu::java::net::PlainDatagramSocketImpl::receive (::java::net::DatagramPacket *p)
+gnu::java::net::PlainDatagramSocketImpl::receive0 (::java::net::DatagramPacket *p)
{
// FIXME: Deal with Multicast and if the socket is connected.
union SockAddr u;