evt 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a9531f3994696a84020be4779721295f069bdffef6640bad51e3a5e7ec2fe03
4
- data.tar.gz: e3767ace4df611ed920321830ec2bb9569736f650e9c84dd20b1247f09294431
3
+ metadata.gz: 76ad8c49742b3360c317120ecd68d3eadf7f5f654a5dd37b45cf4b5d0b59d75c
4
+ data.tar.gz: 33ac090cef3e427c7e6e2e6fb21f7eb5741ce5d3827542980727cce3d7e8eeb3
5
5
  SHA512:
6
- metadata.gz: ca313fa9c2ef76fb2dd6c2f552856dff76701d6db44d4298a37b0fab0b97213b3074983b7fcaf9d6614fce5181345ffcc6ac29cb33fd4264d4257146056bff72
7
- data.tar.gz: 7e5d2c57a5d7a9d2a6c000f537108448188988ef5fe3729e58787df49c46de9d1498c81b89af360a6dc680598c6d577043589b8d8dd09acff058601f83984f12
6
+ metadata.gz: 5781576a0d1a8e2c43117b1cce3569dd13b4141bcab4523556ba1d28fda071f3fe819e24bee0fe3578541a9d3450112b7e6246e0cbb5f1ebe9345edc72e98c24
7
+ data.tar.gz: fe5cd53d17c3df49bb169f759b66b1a7119ef649445c55270ead245069a5c6c242bdf44fde8e234552bcfc8f90ac7eafde7539198af2c1ef64e0d478e2ffb67f
@@ -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 method_scheduler_epoll_backend(VALUE klass) {
82
- return rb_str_new_cstr("epoll");
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
- void epoll_internal_deregister(int epfd, int fd) {
86
- epoll_ctl(epfd, EPOLL_CTL_DEL, fd, NULL);
86
+ VALUE method_scheduler_epoll_backend(VALUE klass) {
87
+ return rb_str_new_cstr("epoll");
87
88
  }
88
-
89
89
  #endif
90
90
  #endif
@@ -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
@@ -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>
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Evt::Bundled
4
- MAXIMUM_TIMEOUT = 5
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
 
@@ -17,6 +17,10 @@ class Evt::Epoll < Evt::Bundled
17
17
  epoll_register(io, interest)
18
18
  end
19
19
 
20
+ def deregister(io)
21
+ epoll_deregister(io)
22
+ end
23
+
20
24
  def wait
21
25
  epoll_wait
22
26
  end
@@ -15,6 +15,9 @@ class Evt::Iocp < Evt::Bundled
15
15
  # Placeholder
16
16
  end
17
17
 
18
+ def deregister(io)
19
+ end
20
+
18
21
  def io_read(io, buffer, offset, length)
19
22
  # Placeholder
20
23
  end
@@ -17,6 +17,9 @@ class Evt::Kqueue < Evt::Bundled
17
17
  kqueue_register(io, interest)
18
18
  end
19
19
 
20
+ def deregister(io)
21
+ end
22
+
20
23
  def wait
21
24
  kqueue_wait
22
25
  end
@@ -17,6 +17,9 @@ class Evt::Select < Evt::Bundled
17
17
  # Select is stateless
18
18
  end
19
19
 
20
+ def deregister(io)
21
+ end
22
+
20
23
  def wait
21
24
  select_wait
22
25
  rescue Errno::EBADF => _
@@ -17,6 +17,9 @@ class Evt::Uring < Evt::Bundled
17
17
  uring_register(io, interest)
18
18
  end
19
19
 
20
+ def deregister(io)
21
+ end
22
+
20
23
  def io_read(io, buffer, offset, length)
21
24
  uring_io_read(io, buffer, offset, length)
22
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Evt
4
- VERSION = "0.3.3"
4
+ VERSION = "0.3.4"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delton Ding