| Index: src/pathops/SkPathOpsOp.cpp
 | 
| diff --git a/src/pathops/SkPathOpsOp.cpp b/src/pathops/SkPathOpsOp.cpp
 | 
| index b7a48b0510c39f525ff076d6fe06ec1d35f4a232..0f4415bec12cfd3115f970053873c2a775368524 100644
 | 
| --- a/src/pathops/SkPathOpsOp.cpp
 | 
| +++ b/src/pathops/SkPathOpsOp.cpp
 | 
| @@ -152,7 +152,7 @@ static bool bridgeOp(SkOpContourHead* contourList, const SkPathOp op,
 | 
|                          current->markDone(spanStart);
 | 
|                      }
 | 
|                  }
 | 
| -                simple->close();
 | 
| +                simple->finishContour();
 | 
|              } else {
 | 
|                  SkOpSpanBase* last = current->markAndChaseDone(start, end);
 | 
|                  if (last && !last->chased()) {
 | 
| @@ -175,7 +175,7 @@ static bool bridgeOp(SkOpContourHead* contourList, const SkPathOp op,
 | 
|              }
 | 
|          } while (true);
 | 
|      } while (true);
 | 
| -    return simple->someAssemblyRequired();
 | 
| +    return true;
 | 
|  }
 | 
|  
 | 
|  // pretty picture:
 | 
| @@ -286,7 +286,7 @@ bool OpDebug(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result
 | 
|      SkPathOpsDebug::gSortCount = SkPathOpsDebug::gSortCountDefault;
 | 
|  #endif
 | 
|      // turn path into list of segments
 | 
| -    SkOpEdgeBuilder builder(*minuend, &contour, &globalState);
 | 
| +    SkOpEdgeBuilder builder(*minuend, contourList, &globalState);
 | 
|      if (builder.unparseable()) {
 | 
|          return false;
 | 
|      }
 | 
| @@ -327,15 +327,10 @@ bool OpDebug(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result
 | 
|      result->reset();
 | 
|      result->setFillType(fillType);
 | 
|      SkPathWriter wrapper(*result);
 | 
| -    bridgeOp(contourList, op, xorMask, xorOpMask, &wrapper);
 | 
| -    {  // if some edges could not be resolved, assemble remaining fragments
 | 
| -        SkPath temp;
 | 
| -        temp.setFillType(fillType);
 | 
| -        SkPathWriter assembled(temp);
 | 
| -        Assemble(wrapper, &assembled);
 | 
| -        *result = *assembled.nativePath();
 | 
| -        result->setFillType(fillType);
 | 
| +    if (!bridgeOp(contourList, op, xorMask, xorOpMask, &wrapper)) {
 | 
| +        return false;
 | 
|      }
 | 
| +    wrapper.assemble();  // if some edges could not be resolved, assemble remaining
 | 
|  #if DEBUG_T_SECT_LOOP_COUNT
 | 
|      {
 | 
|          SkAutoMutexAcquire autoM(debugWorstLoop);
 | 
| 
 |