io-event 1.6.0 → 1.6.2

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: 601c49b58251e4e77e4cfaf2140e834c038ca811c7980dd034f2160440ef7cb2
4
- data.tar.gz: db9a38fc187e6a79d70b38fbb778670ba34d7263f15857aa155dec529117f68c
3
+ metadata.gz: 45049c22b990de175e733bdcce4045d7c4028dd50fa8018ec03b76ec76bfe1f2
4
+ data.tar.gz: 250555adf9d939804cc19f050e8cc42d9f2848e90f75cbcf46abc6543a67dbf1
5
5
  SHA512:
6
- metadata.gz: 2fd3ca69bacc5f41c70b5502224c2baf5b66d394ea8205dfd8f4da85d61f1d5d0aae1406e649394fbd9fbb7a4b275a8502b65548341c0e2e61e8d4e3b6147ff0
7
- data.tar.gz: 239deeba624f0d2a5bdffdd6ceb2d6660317b7564da5c466887f6cee1492b30fe1828f7012e65d19c59ecd997ed625d5effb7e24522b51a7e24324363590d7a2
6
+ metadata.gz: ed43ce7a15045fbad357e4e8b6eb176635ebd4148a2d3a5c229cc9af6c246f3d5bd0c8a80969f0a487fac468365b040888ef1e104275e0c82ef2397923bd24e3
7
+ data.tar.gz: 7d36cf2bb3f8dbdddba94564057b767415ff8da2884c8810c2b88e5dae1162a5f17f7bc538a8f766e1be6c6fb14e0fd213f08182b8e8e29e1fea77292dc8f37d
checksums.yaml.gz.sig CHANGED
Binary file
data/ext/extconf.rb CHANGED
@@ -39,6 +39,8 @@ if have_header('sys/event.h')
39
39
  $srcs << "io/event/selector/kqueue.c"
40
40
  end
41
41
 
42
+ have_header('sys/wait.h')
43
+
42
44
  have_header('sys/eventfd.h')
43
45
  $srcs << "io/event/interrupt.c"
44
46
 
@@ -786,14 +786,7 @@ struct timespec * make_timeout(VALUE duration, struct timespec * storage) {
786
786
  return NULL;
787
787
  }
788
788
 
789
- if (FIXNUM_P(duration)) {
790
- storage->tv_sec = NUM2TIMET(duration);
791
- storage->tv_nsec = 0;
792
-
793
- return storage;
794
- }
795
-
796
- else if (RB_FLOAT_TYPE_P(duration)) {
789
+ if (RB_FLOAT_TYPE_P(duration)) {
797
790
  double value = RFLOAT_VALUE(duration);
798
791
  time_t seconds = value;
799
792
 
@@ -803,7 +796,14 @@ struct timespec * make_timeout(VALUE duration, struct timespec * storage) {
803
796
  return storage;
804
797
  }
805
798
 
806
- rb_raise(rb_eRuntimeError, "unable to convert timeout");
799
+ else if (RB_INTEGER_TYPE_P(duration)) {
800
+ storage->tv_sec = NUM2TIMET(duration);
801
+ storage->tv_nsec = 0;
802
+
803
+ return storage;
804
+ }
805
+
806
+ rb_raise(rb_eArgError, "unable to convert timeout: %"PRIsVALUE, rb_inspect(duration));
807
807
  }
808
808
 
809
809
  static
@@ -799,14 +799,7 @@ struct timespec * make_timeout(VALUE duration, struct timespec * storage) {
799
799
  return NULL;
800
800
  }
801
801
 
802
- if (FIXNUM_P(duration)) {
803
- storage->tv_sec = NUM2TIMET(duration);
804
- storage->tv_nsec = 0;
805
-
806
- return storage;
807
- }
808
-
809
- else if (RB_FLOAT_TYPE_P(duration)) {
802
+ if (RB_FLOAT_TYPE_P(duration)) {
810
803
  double value = RFLOAT_VALUE(duration);
811
804
  time_t seconds = value;
812
805
 
@@ -816,7 +809,14 @@ struct timespec * make_timeout(VALUE duration, struct timespec * storage) {
816
809
  return storage;
817
810
  }
818
811
 
819
- rb_raise(rb_eRuntimeError, "unable to convert timeout");
812
+ else if (RB_INTEGER_TYPE_P(duration)) {
813
+ storage->tv_sec = NUM2TIMET(duration);
814
+ storage->tv_nsec = 0;
815
+
816
+ return storage;
817
+ }
818
+
819
+ rb_raise(rb_eArgError, "unable to convert timeout: %"PRIsVALUE, rb_inspect(duration));
820
820
  }
821
821
 
822
822
  static
@@ -34,8 +34,9 @@
34
34
  #endif
35
35
 
36
36
  #include <time.h>
37
- #ifdef HAVE_RB_PROCESS_STATUS_WAIT
38
- #include <sys/wait.h>
37
+
38
+ #ifdef HAVE_SYS_WAIT_H
39
+ #include <sys/wait.h>
39
40
  #endif
40
41
 
41
42
  enum IO_Event {
@@ -901,14 +901,7 @@ struct __kernel_timespec * make_timeout(VALUE duration, struct __kernel_timespec
901
901
  return NULL;
902
902
  }
903
903
 
904
- if (FIXNUM_P(duration)) {
905
- storage->tv_sec = NUM2TIMET(duration);
906
- storage->tv_nsec = 0;
907
-
908
- return storage;
909
- }
910
-
911
- else if (RB_FLOAT_TYPE_P(duration)) {
904
+ if (RB_FLOAT_TYPE_P(duration)) {
912
905
  double value = RFLOAT_VALUE(duration);
913
906
  time_t seconds = value;
914
907
 
@@ -918,7 +911,14 @@ struct __kernel_timespec * make_timeout(VALUE duration, struct __kernel_timespec
918
911
  return storage;
919
912
  }
920
913
 
921
- rb_raise(rb_eRuntimeError, "unable to convert timeout");
914
+ else if (RB_INTEGER_TYPE_P(duration)) {
915
+ storage->tv_sec = NUM2TIMET(duration);
916
+ storage->tv_nsec = 0;
917
+
918
+ return storage;
919
+ }
920
+
921
+ rb_raise(rb_eArgError, "unable to convert timeout: %"PRIsVALUE, rb_inspect(duration));
922
922
  }
923
923
 
924
924
  static
@@ -9,20 +9,20 @@ class IO
9
9
  module Event
10
10
  class Timers
11
11
  class Handle
12
- def initialize(offset, block)
13
- @offset = offset
12
+ def initialize(time, block)
13
+ @time = time
14
14
  @block = block
15
15
  end
16
16
 
17
17
  def < other
18
- @offset < other.offset
18
+ @time < other.time
19
19
  end
20
20
 
21
21
  def > other
22
- @offset > other.offset
22
+ @time > other.time
23
23
  end
24
24
 
25
- attr :offset
25
+ attr :time
26
26
  attr :block
27
27
 
28
28
  def call(...)
@@ -49,15 +49,19 @@ class IO
49
49
  return @heap.size
50
50
  end
51
51
 
52
- def schedule(offset, block)
53
- handle = Handle.new(offset, block)
52
+ # Schedule a block to be called at a specific time in the future.
53
+ # @parameter time [Time] The time at which the block should be called, relative to {#now}.
54
+ def schedule(time, block)
55
+ handle = Handle.new(time, block)
54
56
  @scheduled << handle
55
57
 
56
58
  return handle
57
59
  end
58
60
 
59
- def after(timeout, &block)
60
- schedule(now + timeout, block)
61
+ # Schedule a block to be called after a specific time offset, relative to the current time as returned by {#now}.
62
+ # @parameter offset [Time] The time offset from the current time at which the block should be called.
63
+ def after(offset, &block)
64
+ schedule(self.now + offset, block)
61
65
  end
62
66
 
63
67
  def wait_interval(now = self.now)
@@ -67,7 +71,7 @@ class IO
67
71
  if handle.cancelled?
68
72
  @heap.pop
69
73
  else
70
- return handle.offset - now
74
+ return handle.time - now
71
75
  end
72
76
  end
73
77
  end
@@ -84,7 +88,7 @@ class IO
84
88
  while handle = @heap.peek
85
89
  if handle.cancelled?
86
90
  @heap.pop
87
- elsif handle.offset <= now
91
+ elsif handle.time <= now
88
92
  # Remove the earliest timer from the heap:
89
93
  @heap.pop
90
94
 
@@ -5,6 +5,6 @@
5
5
 
6
6
  class IO
7
7
  module Event
8
- VERSION = "1.6.0"
8
+ VERSION = "1.6.2"
9
9
  end
10
10
  end
data/readme.md CHANGED
@@ -6,7 +6,7 @@ Provides low level cross-platform primitives for constructing event loops, with
6
6
 
7
7
  ## Motivation
8
8
 
9
- The initial proof-of-concept [Async](https://github.com/socketry/async) was built on [NIO4r](https://github.com/socketry/nio4r). It was perfectly acceptable and well tested in production, however being built on `libev` was a little bit limiting. I wanted to directly built my fiber scheduler into the fabric of the event loop, which is what this gem exposes - it is specifically implemented to support building event loops beneath the fiber scheduler interface, providing an efficient C implementation of all the core operations.
9
+ The initial proof-of-concept [Async](https://github.com/socketry/async) was built on [NIO4r](https://github.com/socketry/nio4r). It was perfectly acceptable and well tested in production, however being built on `libev` was a little bit limiting. I wanted to directly build my fiber scheduler into the fabric of the event loop, which is what this gem exposes - it is specifically implemented to support building event loops beneath the fiber scheduler interface, providing an efficient C implementation of all the core operations.
10
10
 
11
11
  ## Usage
12
12
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: io-event
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -44,7 +44,7 @@ cert_chain:
44
44
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
45
45
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
46
46
  -----END CERTIFICATE-----
47
- date: 2024-06-03 00:00:00.000000000 Z
47
+ date: 2024-06-12 00:00:00.000000000 Z
48
48
  dependencies: []
49
49
  description:
50
50
  email:
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  requirements: []
104
- rubygems_version: 3.5.3
104
+ rubygems_version: 3.5.9
105
105
  signing_key:
106
106
  specification_version: 4
107
107
  summary: An event loop.
metadata.gz.sig CHANGED
Binary file