# HG changeset patch # User Vladimir Vukicevic # Date 1199001374 28800 # Node ID 5f1a5e3fc1ff2e875800a950239eb14294ad40ea # Parent 7a3ee8d0e304032f27ba653529d060046009c326 Put back Background thread fixes; tag 0.2.4 Previous rollbacks were in error; the API server was down, and we don't gracefully handle that at the moment. diff -r 7a3ee8d0e304032f27ba653529d060046009c326 -r 5f1a5e3fc1ff2e875800a950239eb14294ad40ea EveBerry.alx --- a/EveBerry.alx Sat Dec 29 23:55:02 2007 -0800 +++ b/EveBerry.alx Sat Dec 29 23:56:14 2007 -0800 @@ -2,7 +2,7 @@ EveBerry Blackberry EVE Monitor - 0.2.2 + 0.2.4 Mr. Rupert's Quality Software Group Copyright (c) 2007, 2008 MRQSG diff -r 7a3ee8d0e304032f27ba653529d060046009c326 -r 5f1a5e3fc1ff2e875800a950239eb14294ad40ea build.xml --- a/build.xml Sat Dec 29 23:55:02 2007 -0800 +++ b/build.xml Sat Dec 29 23:56:14 2007 -0800 @@ -20,7 +20,7 @@ diff -r 7a3ee8d0e304032f27ba653529d060046009c326 -r 5f1a5e3fc1ff2e875800a950239eb14294ad40ea src/org/mrrupert/eveberry/EveBerryBackground.java --- a/src/org/mrrupert/eveberry/EveBerryBackground.java Sat Dec 29 23:55:02 2007 -0800 +++ b/src/org/mrrupert/eveberry/EveBerryBackground.java Sat Dec 29 23:56:14 2007 -0800 @@ -229,10 +229,22 @@ while (!sFinished) { EveCharacterManager mgr = EveCharacterManager.Manager(); - synchronized(this) { - // do the entire work queue at once - for (int i = 0; i < mWorkQueue.size(); i++) { - final WorkItem wi = (WorkItem) mWorkQueue.elementAt(i); + boolean hasMoreWork = true; + + do { + WorkItem item = null; + + synchronized(this) { + if (mWorkQueue.size() > 0) { + item = (WorkItem) mWorkQueue.elementAt(0); + mWorkQueue.removeElementAt(0); + } + } + + if (item != null) { + EveBerry.debug("Processing work item of type " + item.WorkType); + + final WorkItem wi = item; if (wi.WorkType == ITEM_CHARACTER_UPDATE) { final EveCharacterInfo eci = (EveCharacterInfo) wi.Item; @@ -288,41 +300,52 @@ } } - mWorkQueue.removeAllElements(); + synchronized(this) { + if (mWorkQueue.size() == 0) + hasMoreWork = false; + } + } while (hasMoreWork); - long nextUpdateDelay = computeUpdateTimes(); + long nextUpdateDelay = computeUpdateTimes(); - if (nextUpdateDelay == 0) { - synchronized(mgr) { - Enumeration iter = mgr.enumerateCharacters(); - while (iter.hasMoreElements()) { - EveCharacterInfo eci = (EveCharacterInfo) iter.nextElement(); - EveBerry.debug("++++ Background: queuing update for " + eci.Name); - queueCharacterUpdate(eci, null, null); - } - } - } + if (nextUpdateDelay == 0) { + synchronized(mgr) { + Enumeration iter = mgr.enumerateCharacters(); + while (iter.hasMoreElements()) { + EveCharacterInfo eci = (EveCharacterInfo) iter.nextElement(); + EveBerry.debug("++++ Background: queuing update for " + eci.Name); + queueCharacterUpdate(eci, null, null); + } + } + } - // check if we need to notify anything - checkAndDispatchNotifications(); + // check if we need to notify anything + checkAndDispatchNotifications(); - EveBerry.debug("XXXXXXX nextUpdateDelay in: " + nextUpdateDelay); + EveBerry.debug("XXXXXXX nextUpdateDelay in: " + nextUpdateDelay); - // don't wait if we're sFinished - if (sFinished) - break; + // don't wait if we're sFinished + if (sFinished) + break; - try { - if (nextUpdateDelay > 0) { - // wait the given ms - wait(nextUpdateDelay); - } else if (nextUpdateDelay == -1) { - // wait until we're notified; there are no - // characters. - wait(); - } - } catch (Exception e) { } - } + synchronized(this) { + // did something get stuck in here while we were screwing around? + if (mWorkQueue.size() > 0) { + // yes; don't wait + continue; + } + + try { + if (nextUpdateDelay > 0) { + // wait the given ms + wait(nextUpdateDelay); + } else if (nextUpdateDelay == -1) { + // wait until we're notified; there are no + // characters. + wait(); + } + } catch (Exception e) { } + } } mRunning = false;