Author: jflesch
Date: 2007-05-01 14:16:24 +0000 (Tue, 01 May 2007)
New Revision: 13077
Modified:
trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
trunk/apps/Thaw/src/thaw/plugins/Restarter.java
trunk/apps/Thaw/src/thaw/plugins/StatusBar.java
trunk/apps/Thaw/src/thaw/plugins/TransferLogs.java
trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
Log:
Replace all the catch(ConcurrentModificationException) with synchronizations
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2007-05-01 14:14:37 UTC
(rev 13076)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientGet.java 2007-05-01 14:16:24 UTC
(rev 13077)
@@ -813,6 +813,7 @@
running = false;
fatal = true;
status = "Stopped";
+
setChanged();
this.notifyObservers();
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2007-05-01 14:14:37 UTC
(rev 13076)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2007-05-01 14:16:24 UTC
(rev 13077)
@@ -113,6 +113,7 @@
/**
* Take care: Can change while you're using it.
* The running queue contains running request, but also finished/failed
ones.
+ * synchronize on it if you want to do iterate() on it.
*/
public Vector getRunningQueue() {
return runningQueries;
@@ -146,7 +147,9 @@
Logger.notice(this, "Adding query to the pending queue ...");
- pendingQueries[query.getThawPriority()].add(query);
+ synchronized(pendingQueries) {
+ pendingQueries[query.getThawPriority()].add(query);
+ }
String fileKey = query.getFileKey();
String filename = query.getFilename();
@@ -200,7 +203,9 @@
}
}
- runningQueries.add(query);
+ synchronized(runningQueries) {
+ runningQueries.add(query);
+ }
String fileKey = query.getFileKey();
String filename = query.getFilename();
@@ -254,10 +259,14 @@
public void remove(final FCPTransferQuery query) {
- runningQueries.remove(query);
+ synchronized(runningQueries) {
+ runningQueries.remove(query);
+ }
- for(int i = 0 ; i <= FCPQueueManager.PRIORITY_MIN ; i++)
- pendingQueries[i].remove(query);
+ synchronized(pendingQueries) {
+ for(int i = 0 ; i <= FCPQueueManager.PRIORITY_MIN ; i++)
+ pendingQueries[i].remove(query);
+ }
String fileKey = query.getFileKey();
String filename = query.getFilename();
@@ -306,14 +315,18 @@
* Compare only the refs.
*/
public boolean isInTheQueues(final FCPTransferQuery query) {
- if(runningQueries.contains(query))
- return true;
-
- for(int i = 0 ; i < pendingQueries.length ; i++) {
- if(pendingQueries[i].contains(query))
+ synchronized(runningQueries) {
+ if(runningQueries.contains(query))
return true;
}
+ synchronized(pendingQueries) {
+ for(int i = 0 ; i < pendingQueries.length ; i++) {
+ if(pendingQueries[i].contains(query))
+ return true;
+ }
+ }
+
return false;
}
@@ -341,40 +354,31 @@
* Compare using the key.
*/
public boolean isAlreadyPresent(final FCPTransferQuery query) {
- boolean interrupted=true;
Iterator it;
- while(interrupted) {
- interrupted = false;
+ synchronized(runningQueries) {
+ for(it = runningQueries.iterator();
+ it.hasNext(); )
+ {
+ final FCPTransferQuery plop =
(FCPTransferQuery)it.next();
+ if(isTheSame(plop, query))
+ return true;
+ }
+ }
- try {
- for(it = runningQueries.iterator();
+ synchronized(pendingQueries) {
+ for(int i = 0 ; i <= FCPQueueManager.PRIORITY_MIN ;
i++) {
+ for(it = pendingQueries[i].iterator();
it.hasNext(); )
{
final FCPTransferQuery plop =
(FCPTransferQuery)it.next();
if(isTheSame(plop, query))
return true;
}
-
- for(int i = 0 ; i <=
FCPQueueManager.PRIORITY_MIN ; i++) {
- for(it = pendingQueries[i].iterator();
- it.hasNext(); )
- {
- final FCPTransferQuery
plop = (FCPTransferQuery)it.next();
- if(isTheSame(plop,
query))
- return true;
- }
-
- }
- } catch(final java.util.ConcurrentModificationException
e) {
- Logger.notice(this, "isAlreadyPresent():
Collission. Reitering");
- interrupted = true;
}
-
}
-
return false;
}
@@ -385,16 +389,18 @@
int runningInsertions = 0;
int runningDownloads = 0;
- for(final Iterator it = runningQueries.iterator();
it.hasNext(); ) {
- final FCPTransferQuery query =
(FCPTransferQuery)it.next();
+ synchronized(runningQueries) {
+ for(final Iterator it =
runningQueries.iterator(); it.hasNext(); ) {
+ final FCPTransferQuery query =
(FCPTransferQuery)it.next();
- if((query.getQueryType() == 1 /* Download */)
- && !query.isFinished())
- runningDownloads++;
+ if((query.getQueryType() == 1 /*
Download */)
+ && !query.isFinished())
+ runningDownloads++;
- if((query.getQueryType() == 2 /* Insertion */)
- && !query.isFinished())
- runningInsertions++;
+ if((query.getQueryType() == 2 /*
Insertion */)
+ && !query.isFinished())
+ runningInsertions++;
+ }
}
@@ -405,11 +411,11 @@
|| ((maxDownloads <= -1) ||
(runningDownloads < maxDownloads)) ) ;
priority++) {
- try {
+ synchronized(pendingQueries) {
for(Iterator it =
pendingQueries[priority].iterator();
it.hasNext()
&& ( ((maxInsertions <= -1)
|| (runningInsertions < maxInsertions))
- || ((maxDownloads <=
-1) || (runningDownloads < maxDownloads)) ); ) {
+ || ((maxDownloads <=
-1) || (runningDownloads < maxDownloads)) ); ) {
final FCPTransferQuery query =
(FCPTransferQuery)it.next();
@@ -436,11 +442,7 @@
} catch(final
java.lang.InterruptedException e) { }
}
}
- } catch(final
java.util.ConcurrentModificationException e) {
- Logger.notice(this, "Collision.");
- priority--;
}
-
}
}
@@ -464,15 +466,12 @@
return;
try {
+
if(queryManager.getConnection().isConnected()
&& !queryManager.getConnection().isWriting()
- && queueCompleted) {
-
+ && queueCompleted)
schedule();
- }
- } catch(final java.util.ConcurrentModificationException
e) {
- Logger.notice(this, "Ordonnancor: Collision !");
} catch(final Exception e) {
Logger.error(this, "EXCEPTION FROM ORDONNANCOR
: "+e.toString());
Logger.error(this, "ERROR : "+e.getMessage());
Modified: trunk/apps/Thaw/src/thaw/plugins/Restarter.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/Restarter.java 2007-05-01 14:14:37 UTC
(rev 13076)
+++ trunk/apps/Thaw/src/thaw/plugins/Restarter.java 2007-05-01 14:16:24 UTC
(rev 13077)
@@ -107,80 +107,80 @@
Logger.info(this, "Restarting some failed downloads (if
there are some)");
+ if(!running)
+ break;
+
+ final int maxDownloads =
core.getQueueManager().getMaxDownloads();
+ int alreadyRunning = 0;
+ int failed = 0;
+ final Vector runningQueue =
core.getQueueManager().getRunningQueue();
+
try {
- if(!running)
- break;
+ synchronized(runningQueue) {
- final int maxDownloads =
core.getQueueManager().getMaxDownloads();
- int alreadyRunning = 0;
- int failed = 0;
- final Vector runningQueue =
core.getQueueManager().getRunningQueue();
+ if(maxDownloads >= 0) {
+ /* We count how many are really
running
+ and we write down those
which are failed */
+ for(final Iterator it =
runningQueue.iterator();
+ it.hasNext();) {
+ final FCPTransferQuery
query = (FCPTransferQuery)it.next();
- if(maxDownloads >= 0) {
- /* We count how many are really running
- and we write down those which are
failed */
- for(final Iterator it =
runningQueue.iterator();
- it.hasNext();) {
- final FCPTransferQuery query =
(FCPTransferQuery)it.next();
+ if(query.getQueryType()
!= 1)
+ continue;
- if(query.getQueryType() != 1)
- continue;
+ if(query.isRunning() &&
!query.isFinished()) {
+
alreadyRunning++;
+ }
- if(query.isRunning() &&
!query.isFinished()) {
- alreadyRunning++;
+ if(query.isFinished()
&& !query.isSuccessful()
+ && (restartFatals ||
!query.isFatallyFailed()) ) {
+ failed++;
+ }
}
- if(query.isFinished() &&
!query.isSuccessful()
- && (restartFatals ||
!query.isFatallyFailed()) ) {
- failed++;
- }
- }
+ /* We choose randomly the ones
to restart */
+ while((alreadyRunning <
maxDownloads) && (failed > 0)) {
+ final int toRestart =
(new Random()).nextInt(failed);
- /* We choose randomly the ones to
restart */
- while((alreadyRunning < maxDownloads)
&& (failed > 0)) {
- final int toRestart = (new
Random()).nextInt(failed);
+ final Iterator it =
runningQueue.iterator();
+ int i = 0;
- final Iterator it =
runningQueue.iterator();
- int i = 0;
+ while(it.hasNext()) {
+ final
FCPTransferQuery query = (FCPTransferQuery)it.next();
- while(it.hasNext()) {
- final FCPTransferQuery
query = (FCPTransferQuery)it.next();
+
if(query.getQueryType() != 1)
+
continue;
- if(query.getQueryType()
!= 1)
- continue;
+
if(query.isFinished() && !query.isSuccessful()
+ &&
(restartFatals || !query.isFatallyFailed())) {
+ if(i ==
toRestart) {
+
restartQuery(query);
+
break;
+ }
- if(query.isFinished()
&& !query.isSuccessful()
- && (restartFatals ||
!query.isFatallyFailed())) {
- if(i ==
toRestart) {
-
restartQuery(query);
- break;
+ i++;
}
+ }
- i++;
- }
+ alreadyRunning++;
+ failed--;
}
- alreadyRunning++;
- failed--;
- }
+ } else { /* => if maxDownloads < 0 */
- } else { /* => if maxDownloads < 0 */
+ /* We restart them all */
+ for(final Iterator it =
runningQueue.iterator();
+ it.hasNext();) {
+ final FCPTransferQuery
query = (FCPTransferQuery)it.next();
+
if((query.getQueryType() == 1) && query.isFinished()
+ &&
!query.isSuccessful()
+ && (restartFatals ||
!query.isFatallyFailed()))
+
restartQuery(query);
+ }
+ }
- /* We restart them all */
- for(final Iterator it =
runningQueue.iterator();
- it.hasNext();) {
- final FCPTransferQuery query =
(FCPTransferQuery)it.next();
-
- if((query.getQueryType() == 1)
&& query.isFinished()
- && !query.isSuccessful()
- && (restartFatals ||
!query.isFatallyFailed()))
- restartQuery(query);
- }
}
-
- } catch(final java.util.ConcurrentModificationException
e) {
- Logger.notice(this, "Collision ! Sorry I will
restart failed downloads later ...");
} catch(final Exception e) {
Logger.error(this, "Exception : "+e);
}
Modified: trunk/apps/Thaw/src/thaw/plugins/StatusBar.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2007-05-01 14:14:37 UTC
(rev 13076)
+++ trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2007-05-01 14:16:24 UTC
(rev 13077)
@@ -73,9 +73,9 @@
int pending = 0;
int total = 0;
- try {
- final Vector runningQueue =
core.getQueueManager().getRunningQueue();
+ final Vector runningQueue =
core.getQueueManager().getRunningQueue();
+ synchronized(runningQueue) {
for(final Iterator it = runningQueue.iterator();
it.hasNext(); ) {
final FCPTransferQuery query =
(FCPTransferQuery)it.next();
@@ -96,23 +96,20 @@
failed++;
}
}
+ }
- final Vector[] pendingQueues =
core.getQueueManager().getPendingQueues();
+ final Vector[] pendingQueues =
core.getQueueManager().getPendingQueues();
+ synchronized(pendingQueues) {
for(int i =0 ; i < pendingQueues.length; i++) {
progressTotal += pendingQueues[i].size() * 100;
pending += pendingQueues[i].size();
}
-
- } catch(final java.util.ConcurrentModificationException e) {
- Logger.notice(this, "Collision !");
- core.getMainWindow().setStatus(null,
-
core.getMainWindow().getStatus()+"*");
- return;
}
+
total = finished + failed + running + pending;
String status = "Thaw "+Main.VERSION;
Modified: trunk/apps/Thaw/src/thaw/plugins/TransferLogs.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/TransferLogs.java 2007-05-01 14:14:37 UTC
(rev 13076)
+++ trunk/apps/Thaw/src/thaw/plugins/TransferLogs.java 2007-05-01 14:16:24 UTC
(rev 13077)
@@ -186,27 +186,21 @@
else
core.getQueueManager().addObserver(this);
- boolean finished = false;
- do {
- try {
- for (Iterator it =
core.getQueueManager().getRunningQueue().iterator();
- it.hasNext();) {
- FCPTransferQuery query =
(FCPTransferQuery)it.next();
+ Vector runningQueue = core.getQueueManager().getRunningQueue();
- if (query.isFinished() &&
!isDup(query.getFileKey()))
- notifyEnd(query);
+ synchronized(runningQueue) {
+ for (Iterator it = runningQueue.iterator();
+ it.hasNext();) {
+ FCPTransferQuery query =
(FCPTransferQuery)it.next();
- if (query instanceof Observable)
-
((Observable)query).addObserver(this);
- }
+ if (query.isFinished() &&
!isDup(query.getFileKey()))
+ notifyEnd(query);
- finished = true;
- } catch(final java.util.ConcurrentModificationException
e) {
- Logger.warning(this, "setAsObserver : Collision
!");
+ if (query instanceof Observable)
+ ((Observable)query).addObserver(this);
}
- } while(!finished);
-
+ }
}
@@ -285,6 +279,9 @@
String str;
String key;
+ if (query.isFinished() && query instanceof Observable)
+ ((Observable)query).deleteObserver(this);
+
if (query.getQueryType() == 0 || !query.isFinished())
return;
Modified: trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java 2007-05-01
14:14:37 UTC (rev 13076)
+++ trunk/apps/Thaw/src/thaw/plugins/index/FileTable.java 2007-05-01
14:16:24 UTC (rev 13077)
@@ -443,8 +443,10 @@
i = 0;
- try {
- for (Iterator it =
fileListModel.getFiles().iterator() ;
+ Vector files = fileListModel.getFiles();
+
+ synchronized(files) {
+ for (Iterator it = files.iterator() ;
it.hasNext(); i++) {
thaw.plugins.index.File file =
(thaw.plugins.index.File)it.next();
@@ -468,8 +470,6 @@
/* \_o< */
}
}
- } catch(final
java.util.ConcurrentModificationException e) {
- Logger.debug(this, "Collision :
Restarting refresh from the beginnin");
}
}
}
Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
2007-05-01 14:14:37 UTC (rev 13076)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueuePanel.java
2007-05-01 14:16:24 UTC (rev 13077)
@@ -354,7 +354,7 @@
* @param queries Vector of FCPTransferQuery only
*/
public synchronized void addToTable(final Vector queries) {
- try {
+ synchronized(queries) {
for(final Iterator queryIt = queries.iterator();
queryIt.hasNext();) {
@@ -362,9 +362,6 @@
this.addToTable(query);
}
-
- } catch(final java.util.ConcurrentModificationException e) {
- Logger.notice(this, "Collision.");
}
}
Modified: trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
2007-05-01 14:14:37 UTC (rev 13076)
+++ trunk/apps/Thaw/src/thaw/plugins/queueWatcher/QueueTableModel.java
2007-05-01 14:16:24 UTC (rev 13077)
@@ -147,33 +147,30 @@
}
public synchronized void reloadQueue() {
- try {
- resetTable();
+ resetTable();
- addQueries(queueManager.getRunningQueue());
+ addQueries(queueManager.getRunningQueue());
- final Vector[] pendings =
queueManager.getPendingQueues();
+ final Vector[] pendings = queueManager.getPendingQueues();
- for(int i = 0;i < pendings.length ; i++)
- addQueries(pendings[i]);
- } catch(final java.util.ConcurrentModificationException e) {
- Logger.warning(this, "reloadQueue: Collision !");
- reloadQueue();
- }
+ for(int i = 0;i < pendings.length ; i++)
+ addQueries(pendings[i]);
}
public synchronized void addQueries(final Vector queries) {
- for(final Iterator it = queries.iterator();
- it.hasNext();) {
+ synchronized(queries) {
- final FCPTransferQuery query =
(FCPTransferQuery)it.next();
+ for(final Iterator it = queries.iterator();
+ it.hasNext();) {
- if((query.getQueryType() == 1) && !isForInsertions)
- addQuery(query);
+ final FCPTransferQuery query =
(FCPTransferQuery)it.next();
- if((query.getQueryType() == 2) && isForInsertions)
- addQuery(query);
+ if((query.getQueryType() == 1) &&
!isForInsertions)
+ addQuery(query);
+ if((query.getQueryType() == 2) &&
isForInsertions)
+ addQuery(query);
+ }
}
}