Dolda2000 GitWeb
/
jagi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Actually implement event-driver timeouts.
[jagi.git]
/
src
/
jagi
/
event
/
Driver.java
diff --git
a/src/jagi/event/Driver.java
b/src/jagi/event/Driver.java
index
84238d2
..
a8475b4
100644
(file)
--- 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) {
}
void handle(Watcher w, int evs) {
+ if(!watching.containsKey(w))
+ return;
try {
pause(w);
submit(() -> {
try {
pause(w);
submit(() -> {
@@
-88,8
+90,8
@@
public class Driver {
boolean quit = false;
Throwable error = null;
try {
boolean quit = false;
Throwable error = null;
try {
+ double now = time();
while(true) {
while(true) {
- double now = time();
long timeout = 0;
synchronized(selectors) {
Double first = timeheap.keypeek();
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());
}
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;
}
} catch(Throwable t) {
error = t;