io-event 1.10.1 → 1.10.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: 1364d24d45aed527d779ec0dd91983aa138dc5b2b4185ede359fc75bb7ae4c46
4
- data.tar.gz: 1e4cc1d05bc0a9deebd1efa4df9014f2bcdc870df7da270093475e65a326315c
3
+ metadata.gz: 643309e8464f787b038f0d7a83470e1b4750989455329081a59924c8ba4c1f43
4
+ data.tar.gz: 449bd6b5a87a17f826eaaa6f8d62102641a1722d8a49d4cf3f3036bbff6252c1
5
5
  SHA512:
6
- metadata.gz: bafd0b68f17687f2ad825c90c94dae63f6205892fb61fc0d3c933c36c4a58418a01eec96431140d07380aff391fe7e06c999acb743ce53c8ba35992ed57e2649
7
- data.tar.gz: a6acc478ffafaa890549625434aaf21b850ecfd378f133b7ea8569cae4cd27c0ff8ebcdebd4300960e5d498e14ac6f7f643cd2bab4a582c56aa396dacb9d902f
6
+ metadata.gz: 34cd0ddcba1cc3a67cbf586cacb12a87b07c7f12a2b32d05f6d6a2d288ec50c6f7a53df5be6b8458f479e887831ec74ff395253021a0a5b6af0b7166bbb41f58
7
+ data.tar.gz: 1e13343fea3e66597dc67e4f671df961fa967d8bb09d3c9b5b706e866b250431ec9bac01c49df994c3e7859497ed14a4b8cfe31aa03856dc66bc43aff18f7a5e
checksums.yaml.gz.sig CHANGED
Binary file
@@ -18,7 +18,7 @@
18
18
  enum {
19
19
  DEBUG = 0,
20
20
  DEBUG_COMPLETION = 0,
21
- DEBUG_IO_READ = 1,
21
+ DEBUG_CQE = 0,
22
22
  };
23
23
 
24
24
  enum {URING_ENTRIES = 64};
@@ -552,7 +552,10 @@ VALUE io_wait_transfer(VALUE _arguments) {
552
552
 
553
553
  if (DEBUG) fprintf(stderr, "io_wait_transfer:waiting=%p, result=%d\n", (void*)arguments->waiting, arguments->waiting->result);
554
554
 
555
- if (arguments->waiting->result) {
555
+ int32_t result = arguments->waiting->result;
556
+ if (result < 0) {
557
+ rb_syserr_fail(-result, "io_wait_transfer:io_uring_poll_add");
558
+ } else if (result > 0) {
556
559
  // We explicitly filter the resulting events based on the requested events.
557
560
  // In some cases, poll will report events we didn't ask for.
558
561
  return RB_INT2NUM(events_from_poll_flags(arguments->waiting->result & arguments->flags));
@@ -1059,7 +1062,7 @@ unsigned select_process_completions(struct IO_Event_Selector_URing *selector) {
1059
1062
  }
1060
1063
 
1061
1064
  io_uring_for_each_cqe(ring, head, cqe) {
1062
- if (DEBUG) fprintf(stderr, "select_process_completions: cqe res=%d user_data=%p\n", cqe->res, (void*)cqe->user_data);
1065
+ if (DEBUG_CQE) fprintf(stderr, "select_process_completions: cqe res=%d user_data=%p\n", cqe->res, (void*)cqe->user_data);
1063
1066
 
1064
1067
  ++completed;
1065
1068
 
@@ -421,19 +421,25 @@ module IO::Event
421
421
  writable = Array.new
422
422
  priority = Array.new
423
423
 
424
- @waiting.each do |io, waiter|
425
- waiter.each do |fiber, events|
426
- if (events & IO::READABLE) > 0
427
- readable << io
428
- end
429
-
430
- if (events & IO::WRITABLE) > 0
431
- writable << io
432
- end
433
-
434
- if (events & IO::PRIORITY) > 0
435
- priority << io
424
+ @waiting.delete_if do |io, waiter|
425
+ if io.closed?
426
+ true
427
+ else
428
+ waiter.each do |fiber, events|
429
+ if (events & IO::READABLE) > 0
430
+ readable << io
431
+ end
432
+
433
+ if (events & IO::WRITABLE) > 0
434
+ writable << io
435
+ end
436
+
437
+ if (events & IO::PRIORITY) > 0
438
+ priority << io
439
+ end
436
440
  end
441
+
442
+ false
437
443
  end
438
444
  end
439
445
 
@@ -7,6 +7,6 @@
7
7
  class IO
8
8
  # @namespace
9
9
  module Event
10
- VERSION = "1.10.1"
10
+ VERSION = "1.10.2"
11
11
  end
12
12
  end
data/readme.md CHANGED
@@ -18,6 +18,10 @@ Please see the [project documentation](https://socketry.github.io/io-event/) for
18
18
 
19
19
  Please see the [project releases](https://socketry.github.io/io-event/releases/index) for all releases.
20
20
 
21
+ ### v1.10.2
22
+
23
+ - Improved consistency of handling closed IO when invoking `#select`.
24
+
21
25
  ### v1.10.0
22
26
 
23
27
  - `IO::Event::Profiler` is moved to dedicated gem: [fiber-profiler](https://github.com/socketry/fiber-profiler).
data/releases.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Releases
2
2
 
3
+ ## v1.10.2
4
+
5
+ - Improved consistency of handling closed IO when invoking `#select`.
6
+
3
7
  ## v1.10.0
4
8
 
5
9
  - `IO::Event::Profiler` is moved to dedicated gem: [fiber-profiler](https://github.com/socketry/fiber-profiler).
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.10.1
4
+ version: 1.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -47,7 +47,7 @@ cert_chain:
47
47
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
48
48
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
49
49
  -----END CERTIFICATE-----
50
- date: 2025-05-22 00:00:00.000000000 Z
50
+ date: 1980-01-02 00:00:00.000000000 Z
51
51
  dependencies: []
52
52
  executables: []
53
53
  extensions:
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []
112
- rubygems_version: 3.6.2
112
+ rubygems_version: 3.7.0.dev
113
113
  specification_version: 4
114
114
  summary: An event loop.
115
115
  test_files: []
metadata.gz.sig CHANGED
Binary file