mirror of https://github.com/adamdruppe/arsd.git
signal fd check before other input, hopefully will ctrl+c responsively even when otherwise congested
This commit is contained in:
parent
101c81cd7c
commit
921ff7d046
|
@ -2998,7 +2998,22 @@ struct EventLoopImpl {
|
||||||
assert(fd != -1); // should never happen cuz the api doesn't do that but better to assert than assume.
|
assert(fd != -1); // should never happen cuz the api doesn't do that but better to assert than assume.
|
||||||
auto flags = events[idx].events;
|
auto flags = events[idx].events;
|
||||||
if(flags & ep.EPOLLIN) {
|
if(flags & ep.EPOLLIN) {
|
||||||
if(fd == display.fd) {
|
if (fd == customSignalFD) {
|
||||||
|
version(linux) {
|
||||||
|
import core.sys.linux.sys.signalfd;
|
||||||
|
import core.sys.posix.unistd : read;
|
||||||
|
signalfd_siginfo info;
|
||||||
|
read(customSignalFD, &info, info.sizeof);
|
||||||
|
|
||||||
|
auto sig = info.ssi_signo;
|
||||||
|
|
||||||
|
if(EventLoop.get.signalHandler !is null) {
|
||||||
|
EventLoop.get.signalHandler()(sig);
|
||||||
|
} else {
|
||||||
|
EventLoop.get.exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(fd == display.fd) {
|
||||||
version(sdddd) { import std.stdio; writeln("X EVENT PENDING!"); }
|
version(sdddd) { import std.stdio; writeln("X EVENT PENDING!"); }
|
||||||
this.mtLock();
|
this.mtLock();
|
||||||
scope(exit) this.mtUnlock();
|
scope(exit) this.mtUnlock();
|
||||||
|
@ -3026,21 +3041,6 @@ struct EventLoopImpl {
|
||||||
read(customEventFD, &n, n.sizeof); // reset counter value to zero again
|
read(customEventFD, &n, n.sizeof); // reset counter value to zero again
|
||||||
//{ import core.stdc.stdio; printf("custom event! count=%u\n", eventQueueUsed); }
|
//{ import core.stdc.stdio; printf("custom event! count=%u\n", eventQueueUsed); }
|
||||||
//SimpleWindow.processAllCustomEvents();
|
//SimpleWindow.processAllCustomEvents();
|
||||||
} else if (fd == customSignalFD) {
|
|
||||||
version(linux) {
|
|
||||||
import core.sys.linux.sys.signalfd;
|
|
||||||
import core.sys.posix.unistd : read;
|
|
||||||
signalfd_siginfo info;
|
|
||||||
read(customSignalFD, &info, info.sizeof);
|
|
||||||
|
|
||||||
auto sig = info.ssi_signo;
|
|
||||||
|
|
||||||
if(EventLoop.get.signalHandler !is null) {
|
|
||||||
EventLoop.get.signalHandler()(sig);
|
|
||||||
} else {
|
|
||||||
EventLoop.get.exit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// some other timer
|
// some other timer
|
||||||
version(sdddd) { import std.stdio; writeln("unknown fd: ", fd); }
|
version(sdddd) { import std.stdio; writeln("unknown fd: ", fd); }
|
||||||
|
|
Loading…
Reference in New Issue