gvltest 0.2.0 → 0.3.1

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: 24a4699b2118ba2457c7765d1e9460c0e333ef6edee72442ef83c988ab87fc61
4
- data.tar.gz: 12767cf773794fea581f5eca968304de6c0d5a4cfac54ceda7deb5136fcb6116
3
+ metadata.gz: f0c776ee22aa72d55a949397d2fd7b19c50186e904268a0d03c4ec753c46545e
4
+ data.tar.gz: ba7bcd9b0ea7e44797f2c47d54b64fb36b3910f41f902d1dcd7db4b09a7db004
5
5
  SHA512:
6
- metadata.gz: e039bc89f213882d47834b38f118b6969108842d2f1f7f74c90f11f5bef810b66aafefc234f531dcfebaf92335537b133d29313b967ca27d65829d1cde4b6638
7
- data.tar.gz: 566fd41089e3a155a8d1f86de05aeeab76aeaea9faa614dcae5d9137c9fd7160c7a0aee9deae8c6bb92f6e98f8956b53d93713a360d65ec8aeb9bd7793bd32e6
6
+ metadata.gz: a0ecc757106d729d5c9e29fa0bdc65ffd708140713313a6a517d71b2a2a93f451ae535c25a3627d633c3a2fbfd6cb86d3ec91854149c12198b0161649712b893
7
+ data.tar.gz: c915b0572b764434c55206306dd23caa0c018f224a4ce6c6688c2ad59c8f5fd736411b0d44fccbd21c834c1e25091d81bed283f3ee5fd3390a439086b6b864a6
data/Rakefile CHANGED
@@ -1,6 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "test"
8
+ t.libs << "lib"
9
+ t.test_files = FileList["test/**/test_*.rb"]
10
+ end
11
+
4
12
  require "rake/extensiontask"
5
13
 
6
14
  task build: :compile
@@ -11,4 +19,4 @@ Rake::ExtensionTask.new("gvltest", GEMSPEC) do |ext|
11
19
  ext.lib_dir = "lib/gvltest"
12
20
  end
13
21
 
14
- task default: %i[clobber compile]
22
+ task default: %i[clobber compile test]
@@ -6,20 +6,38 @@
6
6
 
7
7
  static VALUE rb_mGVLTest;
8
8
 
9
- static VALUE sleep_holding_gvl(VALUE self, VALUE timev) {
10
- double time = NUM2DBL(timev);
11
- unsigned long long int ns = time * 1E9;
12
- struct timespec ts = { ns / 1000000000LL, ns % 1000000000LL };
13
-
9
+ static void durable_sleep(struct timespec ts) {
14
10
  int res;
15
11
  do {
16
12
  res = nanosleep(&ts, &ts);
17
13
  } while (res && errno == EINTR);
14
+ }
18
15
 
16
+ static VALUE sleep_holding_gvl(VALUE self, VALUE timev) {
17
+ double time = NUM2DBL(timev);
18
+ unsigned long long int ns = time * 1E9;
19
+ struct timespec ts = { ns / 1000000000LL, ns % 1000000000LL };
20
+ durable_sleep(ts);
19
21
  return timev;
20
22
  }
21
23
 
22
- static void *nop(void *) {
24
+ static void *sleep_without_gvl_i(void *tsv) {
25
+ struct timespec *ts = tsv;
26
+ durable_sleep(*ts);
27
+ return NULL;
28
+ }
29
+
30
+ static VALUE sleep_without_gvl(VALUE self, VALUE timev) {
31
+ double time = NUM2DBL(timev);
32
+ unsigned long long int ns = time * 1E9;
33
+ struct timespec ts = { ns / 1000000000LL, ns % 1000000000LL };
34
+
35
+ rb_thread_call_without_gvl(sleep_without_gvl_i, &ts, NULL, NULL);
36
+ return Qnil;
37
+ }
38
+
39
+
40
+ static void *nop(void *unused) {
23
41
  return NULL;
24
42
  }
25
43
 
@@ -33,5 +51,6 @@ Init_gvltest(void)
33
51
  {
34
52
  rb_mGVLTest = rb_define_module("GVLTest");
35
53
  rb_define_singleton_method(rb_mGVLTest, "sleep_holding_gvl", sleep_holding_gvl, 1);
54
+ rb_define_singleton_method(rb_mGVLTest, "sleep_without_gvl", sleep_without_gvl, 1);
36
55
  rb_define_singleton_method(rb_mGVLTest, "nogvl_nop", nogvl_nop, 0);
37
56
  }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GVLTest
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.1"
5
5
  end
data/lib/gvltest.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "gvltest/version"
4
- require_relative "gvltest/gvltest"
4
+ require "gvltest/gvltest"
metadata CHANGED
@@ -1,15 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gvltest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-05-01 00:00:00.000000000 Z
12
- dependencies: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: gvl_timing
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: minitest
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
13
40
  description: Some test methods for experimenting with CRuby's GVL
14
41
  email:
15
42
  - john@hawthorn.email
@@ -34,7 +61,6 @@ metadata:
34
61
  homepage_uri: https://github.com/jhawthorn/gvltest
35
62
  source_code_uri: https://github.com/jhawthorn/gvltest
36
63
  changelog_uri: https://github.com/jhawthorn/gvltest
37
- post_install_message:
38
64
  rdoc_options: []
39
65
  require_paths:
40
66
  - lib
@@ -49,8 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
75
  - !ruby/object:Gem::Version
50
76
  version: '0'
51
77
  requirements: []
52
- rubygems_version: 3.5.9
53
- signing_key:
78
+ rubygems_version: 4.0.3
54
79
  specification_version: 4
55
80
  summary: Some test methods for experimenting with CRuby's GVL
56
81
  test_files: []