diff options
Diffstat (limited to 'libjava/classpath/gnu/CORBA/gnuRequest.java')
-rw-r--r-- | libjava/classpath/gnu/CORBA/gnuRequest.java | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/libjava/classpath/gnu/CORBA/gnuRequest.java b/libjava/classpath/gnu/CORBA/gnuRequest.java index 5adf7412926..0b3338d3437 100644 --- a/libjava/classpath/gnu/CORBA/gnuRequest.java +++ b/libjava/classpath/gnu/CORBA/gnuRequest.java @@ -83,6 +83,7 @@ import org.omg.PortableInterceptor.ClientRequestInterceptorOperations; import org.omg.PortableInterceptor.ForwardRequest; import org.omg.PortableInterceptor.InvalidSlot; +import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -593,7 +594,7 @@ public class gnuRequest extends Request implements Cloneable { final gnuRequest cloned = Clone(); cloned.oneWay = true; - + new Thread() { public void run() @@ -717,12 +718,11 @@ public class gnuRequest extends Request implements Cloneable * property ({@link #setIOR(IOR)} before calling this method. * * @throws BAD_INV_ORDER, minor code 0, if the IOR has not been previously set - * or if the direct argument addition is mixed with the direct argument - * writing into the output stream. - * + * or if the direct argument addition is mixed with the direct + * argument writing into the output stream. * @return the server response in binary form. */ - public synchronized RawReply submit() +public synchronized RawReply submit() throws ForwardRequest { gnu.CORBA.GIOP.MessageHeader header = new gnu.CORBA.GIOP.MessageHeader(); @@ -788,20 +788,21 @@ public class gnuRequest extends Request implements Cloneable if (socket == null) { - // The BindException may be thrown under very heavy parallel + // The IOException may be thrown under very heavy parallel // load. For some time, just wait, exceptiong the socket to free. Open: for (int i = 0; i < PAUSE_STEPS; i++) { try { if (orb instanceof OrbFunctional) - socket = ((OrbFunctional) orb).socketFactory.createClientSocket( - ior.Internet.host, ior.Internet.port); + socket = ((OrbFunctional) orb).socketFactory. + createClientSocket( + ior.Internet.host, ior.Internet.port); else socket = new Socket(ior.Internet.host, ior.Internet.port); break Open; } - catch (BindException ex) + catch (IOException ex) { try { @@ -833,7 +834,7 @@ public class gnuRequest extends Request implements Cloneable request_part.buffer.writeTo(socketOutput); socketOutput.flush(); - if (!socket.isClosed()) + if (!socket.isClosed() && !oneWay) { MessageHeader response_header = new MessageHeader(); InputStream socketInput = socket.getInputStream(); @@ -937,6 +938,10 @@ public class gnuRequest extends Request implements Cloneable throws SystemException, ForwardRequest { RawReply response = submit(); + + // If this is a one way message, do not care about the response. + if (oneWay && response == EMPTY) + return; if (m_rph == null) m_rph = response.header.create_reply_header(); |