This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]