From a16f2d0f390d78e2a2e4fcaaab5340e3402a2b5a Mon Sep 17 00:00:00 2001 From: Randy Baumgarte Date: Wed, 23 Feb 2011 19:09:59 -0500 Subject: [PATCH] Correct endless loop synchronizing tags if a tag update fails. --- src/cx/fbn/nevernote/threads/SyncRunner.java | 43 ++++++++++++++++++---------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/src/cx/fbn/nevernote/threads/SyncRunner.java b/src/cx/fbn/nevernote/threads/SyncRunner.java index 0a3221e..a53afd4 100644 --- a/src/cx/fbn/nevernote/threads/SyncRunner.java +++ b/src/cx/fbn/nevernote/threads/SyncRunner.java @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; +import java.util.HashMap; import java.util.List; import java.util.TreeSet; import java.util.Vector; @@ -146,6 +147,7 @@ public class SyncRunner extends QObject implements Runnable { private final TreeSet ignoreTags; private final TreeSet ignoreNotebooks; private final TreeSet ignoreLinkedNotebooks; + private HashMap badTagSync; @@ -774,6 +776,11 @@ public class SyncRunner extends QObject implements Runnable { int sequence; + if (badTagSync == null) + badTagSync = new HashMap(); + else + badTagSync.clear(); + Tag enTag = findNextTag(); while(enTag!=null) { if (authRefreshNeeded) @@ -817,20 +824,24 @@ public class SyncRunner extends QObject implements Runnable { updateSequenceNumber = sequence; conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber); } catch (EDAMUserException e) { - logger.log(logger.LOW, "*** EDAM User Excepton syncLocalTags"); - logger.log(logger.LOW, e.toString()); + logger.log(logger.LOW, "*** EDAM User Excepton syncLocalTags: " +enTag.getName()); + logger.log(logger.LOW, e.toString()); + badTagSync.put(enTag.getGuid(),null); error = true; } catch (EDAMSystemException e) { - logger.log(logger.LOW, "** EDAM System Excepton syncLocalTags"); + logger.log(logger.LOW, "** EDAM System Excepton syncLocalTags: " +enTag.getName()); logger.log(logger.LOW, e.toString()); + badTagSync.put(enTag.getGuid(),null); error = true; } catch (EDAMNotFoundException e) { - logger.log(logger.LOW, "*** EDAM Not Found Excepton syncLocalTags"); - logger.log(logger.LOW, e.toString()); + logger.log(logger.LOW, "*** EDAM Not Found Excepton syncLocalTags: " +enTag.getName()); + logger.log(logger.LOW, e.toString()); + badTagSync.put(enTag.getGuid(),null); error = true; } catch (TException e) { - logger.log(logger.LOW, "*** EDAM TExcepton syncLocalTags"); - logger.log(logger.LOW, e.toString()); + logger.log(logger.LOW, "*** EDAM TExcepton syncLocalTags: " +enTag.getName()); + logger.log(logger.LOW, e.toString()); + badTagSync.put(enTag.getGuid(),null); error = true; } @@ -1442,14 +1453,16 @@ public class SyncRunner extends QObject implements Runnable { // Find the parent. If the parent has a sequence > 0 then it is a good // parent. for (int i=0; i 0) { - logger.log(logger.HIGH, "Leaving SyncRunner.findNextTag - tag found"); - return tags.get(i); + if (!badTagSync.containsKey(tags.get(i).getGuid())) { + if (tags.get(i).getParentGuid() == null) { + logger.log(logger.HIGH, "Leaving SyncRunner.findNextTag - tag found without parent"); + return tags.get(i); + } + Tag parentTag = conn.getTagTable().getTag(tags.get(i).getParentGuid()); + if (parentTag.getUpdateSequenceNum() > 0) { + logger.log(logger.HIGH, "Leaving SyncRunner.findNextTag - tag found"); + return tags.get(i); + } } } -- 2.11.0