Return-Path: Delivered-To: apmail-jakarta-httpclient-commits-archive@www.apache.org Received: (qmail 40524 invoked from network); 28 Aug 2006 09:29:38 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 28 Aug 2006 09:29:38 -0000 Received: (qmail 39505 invoked by uid 500); 28 Aug 2006 09:29:38 -0000 Mailing-List: contact httpclient-commits-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: httpclient-dev@jakarta.apache.org Delivered-To: mailing list httpclient-commits@jakarta.apache.org Received: (qmail 39494 invoked by uid 99); 28 Aug 2006 09:29:38 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 28 Aug 2006 02:29:38 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 28 Aug 2006 02:29:37 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 28EC71A981A; Mon, 28 Aug 2006 02:29:17 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r437621 - in /jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio: IOSession.java impl/AsyncHttpDataReceiver.java impl/AsyncHttpDataTransmitter.java impl/DefaultIOSession.java Date: Mon, 28 Aug 2006 09:29:14 -0000 To: httpclient-commits@jakarta.apache.org From: olegk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060828092917.28EC71A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: olegk Date: Mon Aug 28 02:29:14 2006 New Revision: 437621 URL: http://svn.apache.org/viewvc?rev=437621&view=rev Log: Improved handling of read events Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/IOSession.java jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/DefaultIOSession.java Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/IOSession.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/IOSession.java?rev=437621&r1=437620&r2=437621&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/IOSession.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/IOSession.java Mon Aug 28 02:29:14 2006 @@ -38,6 +38,10 @@ int getEventMask(); void setEventMask(int ops); + + void setEvent(int op); + + void clearEvent(int op); void close(); Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java?rev=437621&r1=437620&r2=437621&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataReceiver.java Mon Aug 28 02:29:14 2006 @@ -25,14 +25,18 @@ this.session = session; this.mutex = new Object(); initBuffer(buffersize); - // Start receiving input events immediately - this.session.setEventMask(EventMask.READ); } public void consumeInput() throws IOException { synchronized (this.mutex) { - this.session.channel().read(getBuffer()); - this.mutex.notifyAll(); + int noRead = this.session.channel().read(getBuffer()); + if (noRead == -1) { + this.closed = true; + } + if (noRead != 0) { + this.session.clearEvent(EventMask.READ); + this.mutex.notifyAll(); + } } } @@ -44,6 +48,7 @@ ByteBuffer buffer = getBuffer(); try { while (buffer.position() == 0 && !this.closed) { + this.session.setEvent(EventMask.READ); this.mutex.wait(); } @@ -77,6 +82,9 @@ this.mutex.wait(timeout); } catch (InterruptedException ex) { throw new IOException("Interrupted while waiting for more data"); + } + if (this.closed) { + return false; } return buffer.position() > 0; } Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java?rev=437621&r1=437620&r2=437621&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/AsyncHttpDataTransmitter.java Mon Aug 28 02:29:14 2006 @@ -32,7 +32,7 @@ ByteBuffer buffer = getBuffer(); this.session.channel().write(buffer); if (!buffer.hasRemaining()) { - this.session.setEventMask(EventMask.READ); + this.session.clearEvent(EventMask.WRITE); this.mutex.notifyAll(); } } @@ -42,7 +42,7 @@ if (this.closed) { return; } - this.session.setEventMask(EventMask.READ_WRITE); + this.session.setEvent(EventMask.WRITE); synchronized (this.mutex) { ByteBuffer buffer = getBuffer(); try { Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/DefaultIOSession.java URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/DefaultIOSession.java?rev=437621&r1=437620&r2=437621&view=diff ============================================================================== --- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/DefaultIOSession.java (original) +++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/DefaultIOSession.java Mon Aug 28 02:29:14 2006 @@ -66,8 +66,26 @@ } public void setEventMask(int ops) { - this.key.interestOps(ops); - this.key.selector().wakeup(); + synchronized (this.key) { + this.key.interestOps(ops); + this.key.selector().wakeup(); + } + } + + public void setEvent(int op) { + synchronized (this.key) { + int ops = this.key.interestOps(); + this.key.interestOps(ops | op); + this.key.selector().wakeup(); + } + } + + public void clearEvent(int op) { + synchronized (this.key) { + int ops = this.key.interestOps(); + this.key.interestOps(ops & ~op); + this.key.selector().wakeup(); + } } public int getSocketTimeout() {