X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fjagi%2Fevent%2FDriver.java;h=a8475b4ffc7ae726187b5c199f65406528de1664;hb=2a11bb221932c2e5103e6df1ed2378247e569003;hp=84238d2c9578b4c3dab92df2ea862bd798b1a07c;hpb=37726d25d7aceb766bb9940a94defb0403c53c38;p=jagi.git diff --git a/src/jagi/event/Driver.java b/src/jagi/event/Driver.java index 84238d2..a8475b4 100644 --- a/src/jagi/event/Driver.java +++ b/src/jagi/event/Driver.java @@ -59,6 +59,8 @@ public class Driver { } void handle(Watcher w, int evs) { + if(!watching.containsKey(w)) + return; try { pause(w); submit(() -> { @@ -88,8 +90,8 @@ public class Driver { boolean quit = false; Throwable error = null; try { + double now = time(); while(true) { - double now = time(); long timeout = 0; synchronized(selectors) { Double first = timeheap.keypeek(); @@ -109,6 +111,13 @@ public class Driver { } for(SelectionKey key : poll.selectedKeys()) handle((Watcher)key.attachment(), key.readyOps()); + now = time(); + while(true) { + Double first = timeheap.keypeek(); + if((first == null) || (first > now)) + break; + handle(timeheap.remove(), 0); + } } } catch(Throwable t) { error = t;