Author: kwright
Date: Sun Apr 28 18:04:32 2013
New Revision: 1476809

URL: http://svn.apache.org/r1476809
Log:
Clean up on beginFetch if the beginFetch operation is not complete.  Part of 
CONNECTORS-679.

Modified:
    
manifoldcf/trunk/connectors/webcrawler/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/webcrawler/ThrottledFetcher.java

Modified: 
manifoldcf/trunk/connectors/webcrawler/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/webcrawler/ThrottledFetcher.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/webcrawler/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/webcrawler/ThrottledFetcher.java?rev=1476809&r1=1476808&r2=1476809&view=diff
==============================================================================
--- 
manifoldcf/trunk/connectors/webcrawler/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/webcrawler/ThrottledFetcher.java
 (original)
+++ 
manifoldcf/trunk/connectors/webcrawler/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/webcrawler/ThrottledFetcher.java
 Sun Apr 28 18:04:32 2013
@@ -803,6 +803,16 @@ public class ThrottledFetcher
 
     }
 
+    /** Abort the fetch.
+    */
+    public void abortFetch()
+    {
+      synchronized (this)
+      {
+        refCount--;
+      }
+    }
+    
     /** Note the start of an individual byte read of a specified size.  Call 
this method just before the
     * read request takes place.  Performs the necessary delay prior to reading 
specified number of bytes from the server.
     */
@@ -1240,13 +1250,13 @@ public class ThrottledFetcher
     public void beginFetch(String fetchType)
       throws ManifoldCFException
     {
+      this.fetchType = fetchType;
+      this.fetchCounter = 0L;
+      int lastCreated = 0;
       try
       {
-        this.fetchType = fetchType;
-        this.fetchCounter = 0L;
         // Find or create the needed throttle bins
-        int i = 0;
-        while (i < throttleBinArray.length)
+        for (int i = 0; i < throttleBinArray.length; i++)
         {
           // Access the bins as we need them, and drop them when ref count 
goes to zero
           String binName = connectionBinArray[i].getBinName();
@@ -1262,13 +1272,23 @@ public class ThrottledFetcher
             tb.beginFetch();
           }
           throttleBinArray[i] = tb;
-          i++;
+          lastCreated = i + 1;
         }
       }
       catch (InterruptedException e)
       {
         throw new 
ManifoldCFException("Interrupted",ManifoldCFException.INTERRUPTED);
       }
+      finally
+      {
+        if (lastCreated != throttleBinArray.length)
+        {
+          for (int i = 0; i < lastCreated; i++)
+          {
+            throttleBinArray[i].abortFetch();
+          }
+        }
+      }
     }
 
     /** Execute the fetch and get the return code.  This method uses the


Reply via email to