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);
+                       }
                }
        }



Reply via email to