浏览代码

HADOOP-3442. Limit recursion depth in QuickSort to avoid StackOverflowErrors.


git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.17@666410 13f79535-47bb-0310-9956-ffa450edef68
Christopher Douglas 17 年之前
父节点
当前提交
ad4c44d7d8
共有 2 个文件被更改,包括 8 次插入3 次删除
  1. 4 1
      CHANGES.txt
  2. 4 2
      src/java/org/apache/hadoop/util/QuickSort.java

+ 4 - 1
CHANGES.txt

@@ -10,7 +10,10 @@ Release 0.17.1
 
     HADOOP-3472 MapFile.Reader getClosest() function returns incorrect results
     when before is true (Todd Lipcon via Stack)
- 
+
+    HADOOP-3442. Limit recursion depth in QuickSort to avoid
+    StackOverflowErrors. (cdouglas)
+
 Release 0.17.0 - 2008-05-18
 
   INCOMPATIBLE CHANGES

+ 4 - 2
src/java/org/apache/hadoop/util/QuickSort.java

@@ -43,6 +43,7 @@ public class QuickSort implements IndexedSorter {
     if (null != rep) {
       rep.progress();
     }
+    while (true) {
     if (r-p < 13) {
       for (int i = p; i < r; ++i) {
         for (int j = i; j > p; --j) {
@@ -76,10 +77,11 @@ public class QuickSort implements IndexedSorter {
     // Recurse on smaller interval first to keep stack shallow
     if (i - p - 1 < r - i) {
       sort(s, p, i - 1, rep);
-      sort(s, i, r, rep);
+      p = i;
     } else {
       sort(s, i, r, rep);
-      sort(s, p, i - 1, rep);
+      r = i - 1;
+    }
     }
   }