Author: toad
Date: 2008-10-23 18:09:02 +0000 (Thu, 23 Oct 2008)
New Revision: 23057

Modified:
   branches/db4o/freenet/src/freenet/node/NodeClientCore.java
Log:
Run startup jobs one at a time with a queue.


Modified: branches/db4o/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- branches/db4o/freenet/src/freenet/node/NodeClientCore.java  2008-10-23 
17:45:26 UTC (rev 23056)
+++ branches/db4o/freenet/src/freenet/node/NodeClientCore.java  2008-10-23 
18:09:02 UTC (rev 23057)
@@ -571,23 +571,30 @@
                        }
                }, "Startup completion thread");

-               queue(new DBJob() {
+               queue(startupJobRunner, NativeThread.HIGH_PRIORITY, false);
+       }
+       
+       private int startupDatabaseJobsDone = 0;
+       
+       private DBJob startupJobRunner = new DBJob() {

-                       public void run(ObjectContainer container, 
ClientContext context) {
-                               for(int i=0;i<startupDatabaseJobs.length;i++) {
-                                       try {
-                                               
container.activate(startupDatabaseJobs[i], 1);
-                                               
startupDatabaseJobs[i].run(container, context);
-                                               container.commit();
-                                       } catch (Throwable t) {
-                                               Logger.error(this, "Caught 
"+t+" in startup job "+startupDatabaseJobs[i], t);
-                                       }
-                               }
+               public void run(ObjectContainer container, ClientContext 
context) {
+                       DBJob job = 
startupDatabaseJobs[startupDatabaseJobsDone];
+                       try {
+                               container.activate(job, 1);
+                               job.run(container, context);
+                               container.commit();
+                       } catch (Throwable t) {
+                               Logger.error(this, "Caught "+t+" in startup job 
"+job, t);
+                       }
+                       startupDatabaseJobsDone++;
+                       if(startupDatabaseJobsDone == 
startupDatabaseJobs.length)
                                startupDatabaseJobs = null;
-                       }
-                       
-               }, NativeThread.HIGH_PRIORITY, false);
-       }
+                       else
+                               context.jobRunner.queue(startupJobRunner, 
NativeThread.HIGH_PRIORITY, false);
+               }
+               
+       };

        public interface SimpleRequestSenderCompletionListener {



Reply via email to