pf2 0.5.0 → 0.5.1

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: c4b713a9333a657f9b2259cdbae91e9aabde4312c2791a4dce517ce7d30cc46a
4
- data.tar.gz: f01a941327ac6f2ce8b116a466a85a3021ffe0f612063b0f1466e7a31b373984
3
+ metadata.gz: 29a7c92a2a313dec57af9a3427cd723224f64bf53cf74a488253741e1098c12d
4
+ data.tar.gz: 4958d188fdddec9fb8143a1b864e9c40d989bbb3360745eb0846687cefc97b9d
5
5
  SHA512:
6
- metadata.gz: cf8c6b94d2a2ccee5912388a4f2f43f09612f9f3ba5a4ff10d615c7798bde30eb6061f03a9c79fa1ffe946da5f4a065eeae2bbe75ce1bb99821ce5253cc3ba9f
7
- data.tar.gz: 50bd5c325fded53cf1585245469232c3fb184d1b3b893df0deb35a8f5d410046c3c821b1a27d468df6a3bb9ac8e2d7a12011aaa94a8d6889ca013dd4ec1f8eb1
6
+ metadata.gz: 2a2a7ecd0a4cb0d84f022c3ec1e0844e2c537cfad88f91b0051609006d8c2f4d596f15a1fd259709c97c1ffccbae87e96758a4bcfb70293d88fb44d7888f4071
7
+ data.tar.gz: 28b108cd63c75d7ead6f34fdd88fdaa867a9601a0217899b024176a4e5508ef9dec7395bf7ae77513de6eb4cc765be90e010146bdd114b989b33359e4ac55068
data/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  ## [Unreleased]
2
2
 
3
3
 
4
+ ## [0.5.1] - 2024-03-25
5
+
6
+ ### Fixed
7
+
8
+ - Fixed compilation on non-Linux environments.
9
+
10
+
4
11
  ## [0.5.0] - 2024-03-25
5
12
 
6
13
  ### Added
data/ext/pf2/src/lib.rs CHANGED
@@ -13,6 +13,8 @@ mod scheduler;
13
13
  mod session;
14
14
  #[cfg(target_os = "linux")]
15
15
  mod signal_scheduler;
16
+ #[cfg(not(target_os = "linux"))]
17
+ mod signal_scheduler_unsupported_platform;
16
18
  mod timer_thread_scheduler;
17
19
  mod util;
18
20
 
@@ -1,13 +1,20 @@
1
1
  #![allow(non_snake_case)]
2
2
  #![allow(non_camel_case_types)]
3
3
 
4
- use libc::{clockid_t, pthread_getcpuclockid, pthread_t};
4
+ use libc::{clockid_t, pthread_t};
5
5
  use rb_sys::{rb_check_typeddata, rb_data_type_struct, RTypedData, VALUE};
6
6
  use std::ffi::{c_char, c_int, c_void};
7
7
  use std::mem::MaybeUninit;
8
8
 
9
- // Types and structs from Ruby 3.4.0.
9
+ #[cfg(target_os = "linux")]
10
+ use libc::pthread_getcpuclockid;
11
+
12
+ #[cfg(not(target_os = "linux"))]
13
+ pub unsafe fn pthread_getcpuclockid(thread: pthread_t, clk_id: *mut clockid_t) -> c_int {
14
+ unimplemented!()
15
+ }
10
16
 
17
+ // Types and structs from Ruby 3.4.0.
11
18
  #[repr(C)]
12
19
  pub struct rb_callable_method_entry_struct {
13
20
  /* same fields with rb_method_entry_t */
@@ -16,7 +16,10 @@ use self::configuration::Configuration;
16
16
  use self::new_thread_watcher::NewThreadWatcher;
17
17
  use crate::profile::Profile;
18
18
  use crate::scheduler::Scheduler;
19
+ #[cfg(target_os = "linux")]
19
20
  use crate::signal_scheduler::SignalScheduler;
21
+ #[cfg(not(target_os = "linux"))]
22
+ use crate::signal_scheduler_unsupported_platform::SignalScheduler;
20
23
  use crate::timer_thread_scheduler::TimerThreadScheduler;
21
24
  use crate::util::*;
22
25
 
@@ -176,15 +179,27 @@ impl Session {
176
179
  let ptr = rb_string_value_ptr(&mut str);
177
180
  CStr::from_ptr(ptr).to_str().unwrap()
178
181
  };
179
- configuration::Scheduler::from_str(specified_scheduler).unwrap_or_else(|_| {
180
- // Raise an ArgumentError if the mode is invalid
182
+ let scheduler =
183
+ configuration::Scheduler::from_str(specified_scheduler).unwrap_or_else(|_| {
184
+ // Raise an ArgumentError if the mode is invalid
185
+ unsafe {
186
+ rb_raise(
187
+ rb_eArgError,
188
+ cstr!("Invalid scheduler. Valid values are ':signal' and ':timer_thread'."),
189
+ )
190
+ }
191
+ });
192
+
193
+ // Raise an ArgumentError if the scheduler is not supported on the current platform
194
+ if !cfg!(target_os = "linux") && scheduler == configuration::Scheduler::Signal {
181
195
  unsafe {
182
196
  rb_raise(
183
197
  rb_eArgError,
184
- cstr!("Invalid scheduler. Valid values are ':signal' and ':timer_thread'."),
198
+ cstr!("Signal scheduler is not supported on this platform."),
185
199
  )
186
200
  }
187
- })
201
+ }
202
+ scheduler
188
203
  }
189
204
 
190
205
  pub fn start(&mut self) -> VALUE {
@@ -0,0 +1,39 @@
1
+ use std::sync::{Arc, RwLock};
2
+
3
+ use crate::profile::Profile;
4
+ use crate::scheduler::Scheduler;
5
+ use crate::session::configuration::Configuration;
6
+
7
+ pub struct SignalScheduler {}
8
+
9
+ impl Scheduler for SignalScheduler {
10
+ fn start(&self) -> rb_sys::VALUE {
11
+ unimplemented!()
12
+ }
13
+
14
+ fn stop(&self) -> rb_sys::VALUE {
15
+ unimplemented!()
16
+ }
17
+
18
+ fn on_new_thread(&self, thread: rb_sys::VALUE) {
19
+ unimplemented!()
20
+ }
21
+
22
+ fn dmark(&self) {
23
+ unimplemented!()
24
+ }
25
+
26
+ fn dfree(&self) {
27
+ unimplemented!()
28
+ }
29
+
30
+ fn dsize(&self) -> rb_sys::size_t {
31
+ unimplemented!()
32
+ }
33
+ }
34
+
35
+ impl SignalScheduler {
36
+ pub fn new(configuration: &Configuration, profile: Arc<RwLock<Profile>>) -> Self {
37
+ unimplemented!()
38
+ }
39
+ }
data/lib/pf2/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pf2
2
- VERSION = '0.5.0'
2
+ VERSION = '0.5.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pf2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daisuke Aritomo
@@ -177,6 +177,7 @@ files:
177
177
  - ext/pf2/src/session/ruby_object.rs
178
178
  - ext/pf2/src/siginfo_t.c
179
179
  - ext/pf2/src/signal_scheduler.rs
180
+ - ext/pf2/src/signal_scheduler_unsupported_platform.rs
180
181
  - ext/pf2/src/timer_thread_scheduler.rs
181
182
  - ext/pf2/src/util.rs
182
183
  - lib/pf2.rb