io-event 1.6.0 → 1.6.2

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 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