gvltest 0.2.0 → 0.3.0
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/Rakefile +9 -1
- data/ext/gvltest/gvltest.c +25 -6
- data/lib/gvltest/version.rb +1 -1
- metadata +32 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3099832fb7cf4b13b0a56e5c967d4b56940ceeb6484485674898eed70b5c717
|
4
|
+
data.tar.gz: f955e38ad859a6641d19e7902c94035fa90c8d2174a24116aca7aa45c313b0c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca4be5f938a7b9f0584c651ba4d309cdf4e1dff0f2f6b8c8572352bd177ac943f169a0669899fa47a4e99db23a212869fc94971d6ad5ac9a3deb991a349566d1
|
7
|
+
data.tar.gz: 4a5023ab815279ebd88aa94b61c3947845357ae720851ccd96861dd4e9123167449f1267655d151ad2d0b61910a8485cb1b65c562a39e7ab5c3ff4854039c426
|
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]
|
data/ext/gvltest/gvltest.c
CHANGED
@@ -6,20 +6,38 @@
|
|
6
6
|
|
7
7
|
static VALUE rb_mGVLTest;
|
8
8
|
|
9
|
-
static
|
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 *
|
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
|
}
|
data/lib/gvltest/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gvltest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Hawthorn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
12
|
-
dependencies:
|
11
|
+
date: 2024-06-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: gvl_timing
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
13
41
|
description: Some test methods for experimenting with CRuby's GVL
|
14
42
|
email:
|
15
43
|
- john@hawthorn.email
|
@@ -49,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
77
|
- !ruby/object:Gem::Version
|
50
78
|
version: '0'
|
51
79
|
requirements: []
|
52
|
-
rubygems_version: 3.
|
80
|
+
rubygems_version: 3.4.19
|
53
81
|
signing_key:
|
54
82
|
specification_version: 4
|
55
83
|
summary: Some test methods for experimenting with CRuby's GVL
|