evt 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/evt/epoll.h +8 -8
- data/ext/evt/evt.c +1 -0
- data/ext/evt/evt.h +1 -0
- data/lib/evt/backends/bundled.rb +3 -2
- data/lib/evt/backends/epoll.rb +4 -0
- data/lib/evt/backends/iocp.rb +3 -0
- data/lib/evt/backends/kqueue.rb +3 -0
- data/lib/evt/backends/select.rb +3 -0
- data/lib/evt/backends/uring.rb +3 -0
- data/lib/evt/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76ad8c49742b3360c317120ecd68d3eadf7f5f654a5dd37b45cf4b5d0b59d75c
|
4
|
+
data.tar.gz: 33ac090cef3e427c7e6e2e6fb21f7eb5741ce5d3827542980727cce3d7e8eeb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5781576a0d1a8e2c43117b1cce3569dd13b4141bcab4523556ba1d28fda071f3fe819e24bee0fe3578541a9d3450112b7e6246e0cbb5f1ebe9345edc72e98c24
|
7
|
+
data.tar.gz: fe5cd53d17c3df49bb169f759b66b1a7119ef649445c55270ead245069a5c6c242bdf44fde8e234552bcfc8f90ac7eafde7539198af2c1ef64e0d478e2ffb67f
|
data/ext/evt/epoll.h
CHANGED
@@ -4,8 +4,6 @@
|
|
4
4
|
|
5
5
|
#if HAVE_SYS_EPOLL_H
|
6
6
|
|
7
|
-
void epoll_internal_deregister(int epfd, int fd);
|
8
|
-
|
9
7
|
VALUE method_scheduler_epoll_init(VALUE self) {
|
10
8
|
rb_iv_set(self, "@epfd", INT2NUM(epoll_create(1))); // Size of epoll is ignored after Linux 2.6.8.
|
11
9
|
return Qnil;
|
@@ -69,7 +67,6 @@ VALUE method_scheduler_epoll_wait(VALUE self) {
|
|
69
67
|
obj_io = (VALUE) events[i].data.ptr;
|
70
68
|
rb_funcall(writables, id_push, 1, obj_io);
|
71
69
|
}
|
72
|
-
epoll_internal_deregister(epfd, events[i].data.fd);
|
73
70
|
}
|
74
71
|
|
75
72
|
result = rb_ary_new2(2);
|
@@ -78,13 +75,16 @@ VALUE method_scheduler_epoll_wait(VALUE self) {
|
|
78
75
|
return result;
|
79
76
|
}
|
80
77
|
|
81
|
-
VALUE
|
82
|
-
|
78
|
+
VALUE method_scheduler_epoll_deregister(VALUE self, VALUE io) {
|
79
|
+
ID id_fileno = rb_intern("fileno");
|
80
|
+
int epfd = NUM2INT(rb_iv_get(self, "@epfd"));
|
81
|
+
int fd = NUM2INT(rb_funcall(io, id_fileno, 0));
|
82
|
+
epoll_ctl(epfd, EPOLL_CTL_DEL, fd, NULL); // Require Linux 2.6.9 for NULL event.
|
83
|
+
return Qnil;
|
83
84
|
}
|
84
85
|
|
85
|
-
|
86
|
-
|
86
|
+
VALUE method_scheduler_epoll_backend(VALUE klass) {
|
87
|
+
return rb_str_new_cstr("epoll");
|
87
88
|
}
|
88
|
-
|
89
89
|
#endif
|
90
90
|
#endif
|
data/ext/evt/evt.c
CHANGED
@@ -24,6 +24,7 @@ void Init_evt_ext()
|
|
24
24
|
rb_define_singleton_method(Bundled, "epoll_backend", method_scheduler_epoll_backend, 0);
|
25
25
|
rb_define_method(Bundled, "epoll_init_selector", method_scheduler_epoll_init, 0);
|
26
26
|
rb_define_method(Bundled, "epoll_register", method_scheduler_epoll_register, 2);
|
27
|
+
rb_define_method(Bundled, "epoll_deregister", method_scheduler_epoll_deregister, 1);
|
27
28
|
rb_define_method(Bundled, "epoll_wait", method_scheduler_epoll_wait, 0);
|
28
29
|
#endif
|
29
30
|
#if HAVE_SYS_EVENT_H
|
data/ext/evt/evt.h
CHANGED
@@ -45,6 +45,7 @@ void Init_evt_ext();
|
|
45
45
|
#if HAVE_SYS_EPOLL_H
|
46
46
|
VALUE method_scheduler_epoll_init(VALUE self);
|
47
47
|
VALUE method_scheduler_epoll_register(VALUE self, VALUE io, VALUE interest);
|
48
|
+
VALUE method_scheduler_epoll_deregister(VALUE self, VALUE io);
|
48
49
|
VALUE method_scheduler_epoll_wait(VALUE self);
|
49
50
|
VALUE method_scheduler_epoll_backend(VALUE klass);
|
50
51
|
#include <sys/epoll.h>
|
data/lib/evt/backends/bundled.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Evt::Bundled
|
4
|
-
MAXIMUM_TIMEOUT =
|
4
|
+
MAXIMUM_TIMEOUT = 5000
|
5
5
|
COLLECT_COUNTER_MAX = 16384
|
6
6
|
|
7
7
|
def initialize
|
@@ -26,7 +26,7 @@ class Evt::Bundled
|
|
26
26
|
_fiber, timeout = @waiting.min_by{ |key, value| value }
|
27
27
|
|
28
28
|
if timeout
|
29
|
-
offset = timeout - current_time
|
29
|
+
offset = (timeout - current_time) * 1000 # Use mililisecond
|
30
30
|
return 0 if offset < 0
|
31
31
|
return offset if offset < MAXIMUM_TIMEOUT
|
32
32
|
end
|
@@ -101,6 +101,7 @@ class Evt::Bundled
|
|
101
101
|
@writable[io] = Fiber.current unless (events & IO::WRITABLE).zero?
|
102
102
|
self.register(io, events)
|
103
103
|
Fiber.yield
|
104
|
+
self.deregister(io)
|
104
105
|
true
|
105
106
|
end
|
106
107
|
|
data/lib/evt/backends/epoll.rb
CHANGED
data/lib/evt/backends/iocp.rb
CHANGED
data/lib/evt/backends/kqueue.rb
CHANGED
data/lib/evt/backends/select.rb
CHANGED
data/lib/evt/backends/uring.rb
CHANGED
data/lib/evt/version.rb
CHANGED