private static Queue events = new Queue(50);
/** the number of objects in the queue that are not subclasses of ThreadMessage */
- private static volatile int nonThreadEventsInQueue = 0;
+ public static volatile int nonThreadEventsInQueue = 0;
/** the message currently being performed */
static Message currentlyPerforming = null;
i--;
continue;
}
- working = true;
+ if (!(e instanceof Thread)) working = true;
currentlyPerforming = e;
// for debugging purposes
} catch (Throwable t) {
if (Log.on) Log.log(this, "caught throwable in MessageQueue.run(); this should never happen");
-
- /* FIXME: causes crashes on Win32
if (Log.on) Log.log(this, " currentlyPerforming == " + currentlyPerforming);
if (Log.on) Log.log(this, " working == " + working);
if (Log.on) Log.log(this, " lastfunc == " + lastfunc);
if (Log.on) Log.log(this, " lastmessage == " + lastmessage);
- */
-
+ if (Log.on) Log.log(this, t);
if (Log.on) Log.log(this, "resuming MessageQueue loop");
}
}
public MessageQueueWatcher() { start(); }
public void run() {
while(true) {
- if (m != null && m == MessageQueue.currentlyPerforming) {
+ if ((m != null && m == MessageQueue.currentlyPerforming) || MessageQueue.working) {
Context cx;
String what;
- if (m instanceof ThreadMessage) {
+ if (m == null) {
+ cx = Context.getContextForThread(MessageQueue.singleton);
+ what = "trap";
+ } else if (m instanceof ThreadMessage) {
ThreadMessage tm = (ThreadMessage)m;
cx = Context.getContextForThread(tm);
what = "background thread";
} else {
cx = Context.getContextForThread(MessageQueue.singleton);
- what = Main.initializationComplete ? "trap" : "script";
+ what = "script";
}
- if (Log.on) Log.log(this, "WARNING: executing same " + what + " for " + (System.currentTimeMillis() - t) / 1000 + "s" +
+ if (Log.on) Log.log(this, "note: executing same " + what + " for " + (System.currentTimeMillis() - t) / 1000 + "s" +
" at " + cx.interpreterSourceFile + ":" + cx.interpreterLine);
} else {
m = MessageQueue.currentlyPerforming;
t = System.currentTimeMillis();
}
- try { Thread.sleep(Main.initializationComplete ? 1000 : 15000); } catch (Exception e) { }
+ try { Thread.sleep(1000); } catch (Exception e) { }
}
}
}