You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/06/05 15:27:23 UTC

svn commit: r544482 - in /jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util: SharedInputBuffer.java SharedOutputBuffer.java

Author: olegk
Date: Tue Jun  5 06:27:22 2007
New Revision: 544482

URL: http://svn.apache.org/viewvc?view=rev&rev=544482
Log:
Fixed a severe bug in Shared*Buffer classes that could cause an infinite loop in an read / write operation if it was interrupted by shutting down the shared buffer

Modified:
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedInputBuffer.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedOutputBuffer.java

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedInputBuffer.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedInputBuffer.java?view=diff&rev=544482&r1=544481&r2=544482
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedInputBuffer.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedInputBuffer.java Tue Jun  5 06:27:22 2007
@@ -31,6 +31,7 @@
 package org.apache.http.nio.util;
 
 import java.io.IOException;
+import java.io.InterruptedIOException;
 
 import org.apache.http.nio.ContentDecoder;
 import org.apache.http.nio.IOControl;
@@ -96,7 +97,10 @@
     protected void waitForData() throws IOException {
         synchronized (this.mutex) {
             try {
-                while (!hasData() && !this.endOfStream && !this.shutdown) {
+                while (!hasData() && !this.endOfStream) {
+                    if (this.shutdown) {
+                        throw new InterruptedIOException("Input operation aborted");
+                    }
                     this.ioctrl.requestInput();
                     this.mutex.wait();
                 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedOutputBuffer.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedOutputBuffer.java?view=diff&rev=544482&r1=544481&r2=544482
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedOutputBuffer.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/util/SharedOutputBuffer.java Tue Jun  5 06:27:22 2007
@@ -31,6 +31,7 @@
 package org.apache.http.nio.util;
 
 import java.io.IOException;
+import java.io.InterruptedIOException;
 
 import org.apache.http.nio.ContentEncoder;
 import org.apache.http.nio.IOControl;
@@ -152,7 +153,10 @@
     private void flushContent() throws IOException {
         synchronized (this.mutex) {
             try {
-                while (hasData() && !this.shutdown) {
+                while (hasData()) {
+                    if (this.shutdown) {
+                        throw new InterruptedIOException("Output operation aborted");
+                    }
                     this.ioctrl.requestOutput();
                     this.mutex.wait();
                 }