From 83c3152b5d2d51b1f601953bcbbce987e4112659 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Sun, 29 Mar 2015 13:40:04 +0000 Subject: [PATCH] JobQueue: Don't start thread in constructor (ticket #973) --- router/java/src/net/i2p/router/JobQueue.java | 18 ++++++++++++++---- .../java/src/net/i2p/router/RouterContext.java | 1 + 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/router/java/src/net/i2p/router/JobQueue.java b/router/java/src/net/i2p/router/JobQueue.java index bc34d6e879..214ebd7194 100644 --- a/router/java/src/net/i2p/router/JobQueue.java +++ b/router/java/src/net/i2p/router/JobQueue.java @@ -125,6 +125,9 @@ public class JobQueue { */ private final Object _runnerLock = new Object(); + /** + * Does not start the pumper. Caller MUST call startup. + */ public JobQueue(RouterContext context) { _context = context; _log = context.logManager().getLog(JobQueue.class); @@ -143,16 +146,12 @@ public class JobQueue { _context.statManager().createRateStat("jobQueue.jobWait", "How long does a job sit on the job queue?", "JobQueue", new long[] { 60*60*1000l, 24*60*60*1000l }); //_context.statManager().createRateStat("jobQueue.jobRunnerInactive", "How long are runners inactive?", "JobQueue", new long[] { 60*1000l, 60*60*1000l, 24*60*60*1000l }); - _alive = true; _readyJobs = new LinkedBlockingQueue<Job>(); _timedJobs = new TreeSet<Job>(new JobComparator()); _jobLock = new Object(); _queueRunners = new ConcurrentHashMap<Integer,JobQueueRunner>(RUNNERS); _jobStats = new ConcurrentHashMap<String,JobStats>(); _pumper = new QueuePumper(); - I2PThread pumperThread = new I2PThread(_pumper, "Job Queue Pumper", true); - //pumperThread.setPriority(I2PThread.NORM_PRIORITY+1); - pumperThread.start(); } /** @@ -329,6 +328,17 @@ public class JobQueue { runQueue(RUNNERS); } + /** + * Start the pumper. + * @since 0.9.19 + */ + public void startup() { + _alive = true; + I2PThread pumperThread = new I2PThread(_pumper, "Job Queue Pumper", true); + //pumperThread.setPriority(I2PThread.NORM_PRIORITY+1); + pumperThread.start(); + } + /** @deprecated do you really want to do this? */ public void restart() { synchronized (_jobLock) { diff --git a/router/java/src/net/i2p/router/RouterContext.java b/router/java/src/net/i2p/router/RouterContext.java index fd5c657759..efc0036fae 100644 --- a/router/java/src/net/i2p/router/RouterContext.java +++ b/router/java/src/net/i2p/router/RouterContext.java @@ -181,6 +181,7 @@ public class RouterContext extends I2PAppContext { } _clientMessagePool = new ClientMessagePool(this); _jobQueue = new JobQueue(this); + _jobQueue.startup(); _inNetMessagePool = new InNetMessagePool(this); _outNetMessagePool = new OutNetMessagePool(this); _messageHistory = new MessageHistory(this); -- GitLab