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 +4 -4
- data/Cargo.lock +1 -1
- data/ext/itsi_scheduler/Cargo.toml +1 -1
- data/ext/itsi_scheduler/src/itsi_scheduler.rs +16 -10
- data/ext/itsi_server/Cargo.toml +1 -1
- data/lib/itsi/scheduler/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a909654e8cfbe862c3bae6a211a7c49f2852ba76870d1aa1e7de91122fdbc6cc
|
4
|
+
data.tar.gz: 6b2d6d281008d2ee680553d9dbde3b32911d713cc438bfefc5119e642cb16dfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b73a90da6b1f94f14704b7a9bf195e6eb2a5d6e1ec7638c7440610146bf738cd4999abf84e38acff4db4d32b4cfb0bb97d1e86fa3447f6ca1565c37301de59c
|
7
|
+
data.tar.gz: 4572f871c428b4387cd9150f3f825e3495f634a694bb5791ec8a58afcd7bd0cd47f996cf7d0efe54d2ceb869f04c586a140fc1f85865fd065f6d1965b02cb3d5
|
data/Cargo.lock
CHANGED
@@ -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
|
229
|
-
let
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
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(|| {
|
data/ext/itsi_server/Cargo.toml
CHANGED
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.
|
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.
|
200
|
+
version: '3.1'
|
201
201
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
202
|
requirements:
|
203
203
|
- - ">="
|