itsi-scheduler 0.2.7 → 0.2.8

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: d1bc3d31e647642d096846f41852991ea7f31c3b2c1e70c4ed07ec7c0676e48e
4
- data.tar.gz: 1d335eb5d0fbe3cf02031cedb096db4b8bbf8cdd49db899b6e2db4efe30d2830
3
+ metadata.gz: a909654e8cfbe862c3bae6a211a7c49f2852ba76870d1aa1e7de91122fdbc6cc
4
+ data.tar.gz: 6b2d6d281008d2ee680553d9dbde3b32911d713cc438bfefc5119e642cb16dfc
5
5
  SHA512:
6
- metadata.gz: 9e9a99c1ce6e278159dd31a525810ddf2661563f823dd54bc4c6e5686fcb9b70e7137d3a9622aa1f794553f2e26c43b5c1d37bda2b549aa0306b6c24c410083f
7
- data.tar.gz: 30d3ac6eefb849cdf6d53db6dfe420af9586be2b1d7efa2ce5605e29bd5bf686683033e48ebe835d41cabd29abfdce953131f8ee640e7a8ecb902ac235123248
6
+ metadata.gz: 5b73a90da6b1f94f14704b7a9bf195e6eb2a5d6e1ec7638c7440610146bf738cd4999abf84e38acff4db4d32b4cfb0bb97d1e86fa3447f6ca1565c37301de59c
7
+ data.tar.gz: 4572f871c428b4387cd9150f3f825e3495f634a694bb5791ec8a58afcd7bd0cd47f996cf7d0efe54d2ceb869f04c586a140fc1f85865fd065f6d1965b02cb3d5
data/Cargo.lock CHANGED
@@ -213,7 +213,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
213
213
 
214
214
  [[package]]
215
215
  name = "itsi-scheduler"
216
- version = "0.2.7"
216
+ version = "0.2.8"
217
217
  dependencies = [
218
218
  "bytes",
219
219
  "derive_more",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-scheduler"
3
- version = "0.2.7"
3
+ version = "0.2.8"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -7,7 +7,7 @@ use itsi_error::ItsiError;
7
7
  use itsi_rb_helpers::{call_without_gvl, create_ruby_thread};
8
8
  use magnus::{
9
9
  error::Result as MagnusResult,
10
- value::{InnerValue, Opaque, ReprValue},
10
+ value::{InnerValue, Lazy, LazyId, Opaque, ReprValue},
11
11
  Module, RClass, Ruby, Value,
12
12
  };
13
13
  use mio::{Events, Poll, Token, Waker};
@@ -19,7 +19,7 @@ use std::{
19
19
  time::Duration,
20
20
  };
21
21
  use timer::Timer;
22
- use tracing::{debug, info, warn};
22
+ use tracing::{debug, error, info, warn};
23
23
 
24
24
  #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
25
25
  pub(crate) struct Readiness(i16);
@@ -31,6 +31,9 @@ impl std::fmt::Debug for ItsiScheduler {
31
31
  }
32
32
 
33
33
  const WAKE_TOKEN: Token = Token(0);
34
+ static ID_CURRENT: LazyId = LazyId::new("current");
35
+ static CLASS_FIBER: Lazy<RClass> =
36
+ Lazy::new(|ruby| ruby.module_kernel().const_get("Fiber").unwrap());
34
37
 
35
38
  #[magnus::wrap(class = "Itsi::Scheduler", free_immediately, size)]
36
39
  pub(crate) struct ItsiScheduler {
@@ -225,14 +228,17 @@ impl ItsiScheduler {
225
228
  let result: Arc<RwLock<Option<T>>> = Arc::new(RwLock::new(None));
226
229
  let result_clone = Arc::clone(&result);
227
230
 
228
- let current_fiber = Opaque::from(ruby.fiber_current());
229
- let scheduler = Opaque::from(
230
- ruby.module_kernel()
231
- .const_get::<_, RClass>("Fiber")
232
- .unwrap()
233
- .funcall::<_, _, Value>("scheduler", ())
234
- .unwrap(),
235
- );
231
+ let class_fiber = ruby.get_inner(&CLASS_FIBER);
232
+ let current_fiber = ruby
233
+ .get_inner(&CLASS_FIBER)
234
+ .funcall::<_, _, Value>(*ID_CURRENT, ());
235
+
236
+ if current_fiber.is_err() {
237
+ error!("Failed to get current fiber");
238
+ return Err(ItsiError::ArgumentError("Failed to get current fiber".to_string()).into());
239
+ }
240
+ let current_fiber = Opaque::from(current_fiber.unwrap());
241
+ let scheduler = Opaque::from(class_fiber.funcall::<_, _, Value>("scheduler", ()).unwrap());
236
242
 
237
243
  create_ruby_thread(move || {
238
244
  call_without_gvl(|| {
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-server"
3
- version = "0.2.7"
3
+ version = "0.2.8"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Itsi
4
4
  class Scheduler
5
- VERSION = "0.2.7"
5
+ VERSION = "0.2.8"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itsi-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
@@ -197,7 +197,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - ">="
199
199
  - !ruby/object:Gem::Version
200
- version: 3.0.0
200
+ version: '3.1'
201
201
  required_rubygems_version: !ruby/object:Gem::Requirement
202
202
  requirements:
203
203
  - - ">="