usleep 0.0.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 +7 -0
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/Gemfile +5 -0
- data/README.md +10 -0
- data/Rakefile +16 -0
- data/ext/ext/extconf.rb +3 -0
- data/ext/ext/usleep.c +23 -0
- data/lib/usleep.rb +4 -0
- data/lib/usleep/version.rb +3 -0
- data/spec/unit/usleep_spec.rb +21 -0
- data/usleep.gemspec +29 -0
- metadata +103 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: ed1ae7252234ade0db2e259f484817e67e043573
|
|
4
|
+
data.tar.gz: 5f25e467c6e8928e8944e8428eb90363696c77f8
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 6e225d3f3a9eff13e43cdd41eb221bf74d98246ebb0df1c2c0c00f6db80a4530c2cad0c12ed48250090e2570117cc771c118aca5eb0aa5c213f4db4a5ec33840
|
|
7
|
+
data.tar.gz: c557a2beda25a43bba7365cd15564ddeafeae6af43d7a6e9983e25e8c3b541b8e8920334fcfce747945118203361c97551c0d14d1fa34ed94637a7dd695cf0e9
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Usleep
|
|
2
|
+
======
|
|
3
|
+
|
|
4
|
+
This Ruby gem provides a module with a single function: `Usleep.sleep( )`
|
|
5
|
+
|
|
6
|
+
This function sleeps for an integer amount of seconds in C code while holding
|
|
7
|
+
the Ruby Global VM Lock (GVL). This is a worthless behavior that noone should
|
|
8
|
+
allow in production code, but is useful in testing for simulating an operation
|
|
9
|
+
that blocks other Ruby threads and is "uninterpretable" from other Ruby code
|
|
10
|
+
once it begins.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'rake/extensiontask'
|
|
2
|
+
require 'rspec/core/rake_task'
|
|
3
|
+
|
|
4
|
+
Rake::ExtensionTask.new 'ext' do |ext|
|
|
5
|
+
ext.lib_dir = 'lib/usleep'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
namespace(:spec) do
|
|
9
|
+
desc 'Run RSpec unit tests'
|
|
10
|
+
RSpec::Core::RakeTask.new(:unit) do |task|
|
|
11
|
+
task.pattern = 'spec/unit/**{,/*/**}/*_spec.rb'
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc 'Run all test suites'
|
|
16
|
+
task(:test => ['spec:unit'])
|
data/ext/ext/extconf.rb
ADDED
data/ext/ext/usleep.c
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
|
|
3
|
+
#include <unistd.h>
|
|
4
|
+
|
|
5
|
+
static VALUE
|
|
6
|
+
do_sleep(VALUE mod, VALUE time_to_sleep)
|
|
7
|
+
{
|
|
8
|
+
unsigned int naptime = NUM2UINT(time_to_sleep);
|
|
9
|
+
|
|
10
|
+
sleep(naptime);
|
|
11
|
+
|
|
12
|
+
return Qnil;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
void
|
|
16
|
+
Init_ext()
|
|
17
|
+
{
|
|
18
|
+
rb_require("usleep/version");
|
|
19
|
+
|
|
20
|
+
VALUE mUsleep = rb_const_get(rb_cObject, rb_intern("Usleep"));
|
|
21
|
+
|
|
22
|
+
rb_define_singleton_method(mUsleep, "sleep", do_sleep, 1);
|
|
23
|
+
}
|
data/lib/usleep.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'usleep'
|
|
2
|
+
|
|
3
|
+
describe Usleep do
|
|
4
|
+
it 'blocks other threads when sleeping' do
|
|
5
|
+
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_second)
|
|
6
|
+
|
|
7
|
+
sleeper = Thread.new { Usleep.sleep(1) }
|
|
8
|
+
|
|
9
|
+
5.times do
|
|
10
|
+
sleep(0.1)
|
|
11
|
+
Thread.pass
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
sleeper.kill
|
|
15
|
+
sleeper.join
|
|
16
|
+
|
|
17
|
+
end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_second)
|
|
18
|
+
|
|
19
|
+
expect(end_time - start_time).to be > 1.0
|
|
20
|
+
end
|
|
21
|
+
end
|
data/usleep.gemspec
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'usleep/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = 'usleep'
|
|
8
|
+
spec.version = Usleep::VERSION
|
|
9
|
+
spec.authors = ['Charlie Sharpsteen']
|
|
10
|
+
spec.email = ['source@sharpsteen.net']
|
|
11
|
+
spec.license = 'MIT'
|
|
12
|
+
|
|
13
|
+
spec.summary = 'A Ruby library that provides functionality for sleeping while holding the Global VM Lock (GVL).'
|
|
14
|
+
spec.homepage = 'https://github.com/Sharpie/ruby-usleep'
|
|
15
|
+
spec.description = <<-EOS
|
|
16
|
+
A Ruby library that can execute a sleep while holding the Global VM Lock,
|
|
17
|
+
which is pathological behavior that would normally be avoided in practice.
|
|
18
|
+
However, having an easy method of blocking the Ruby VM from a thread is
|
|
19
|
+
useful in certain debugging and simulation scenarios.
|
|
20
|
+
EOS
|
|
21
|
+
|
|
22
|
+
spec.files = %x[git ls-files].split($/)
|
|
23
|
+
spec.require_paths = ['lib']
|
|
24
|
+
spec.extensions = Dir['ext/**/extconf.rb']
|
|
25
|
+
|
|
26
|
+
spec.add_development_dependency 'rake', '~> 12.3'
|
|
27
|
+
spec.add_development_dependency 'rake-compiler', '~> 1.0'
|
|
28
|
+
spec.add_development_dependency 'rspec', '~> 3.7'
|
|
29
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: usleep
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Charlie Sharpsteen
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2018-03-11 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rake
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '12.3'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '12.3'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake-compiler
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '1.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '3.7'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '3.7'
|
|
55
|
+
description: |
|
|
56
|
+
A Ruby library that can execute a sleep while holding the Global VM Lock,
|
|
57
|
+
which is pathological behavior that would normally be avoided in practice.
|
|
58
|
+
However, having an easy method of blocking the Ruby VM from a thread is
|
|
59
|
+
useful in certain debugging and simulation scenarios.
|
|
60
|
+
email:
|
|
61
|
+
- source@sharpsteen.net
|
|
62
|
+
executables: []
|
|
63
|
+
extensions:
|
|
64
|
+
- ext/ext/extconf.rb
|
|
65
|
+
extra_rdoc_files: []
|
|
66
|
+
files:
|
|
67
|
+
- ".gitignore"
|
|
68
|
+
- ".rspec"
|
|
69
|
+
- Gemfile
|
|
70
|
+
- README.md
|
|
71
|
+
- Rakefile
|
|
72
|
+
- ext/ext/extconf.rb
|
|
73
|
+
- ext/ext/usleep.c
|
|
74
|
+
- lib/usleep.rb
|
|
75
|
+
- lib/usleep/version.rb
|
|
76
|
+
- spec/unit/usleep_spec.rb
|
|
77
|
+
- usleep.gemspec
|
|
78
|
+
homepage: https://github.com/Sharpie/ruby-usleep
|
|
79
|
+
licenses:
|
|
80
|
+
- MIT
|
|
81
|
+
metadata: {}
|
|
82
|
+
post_install_message:
|
|
83
|
+
rdoc_options: []
|
|
84
|
+
require_paths:
|
|
85
|
+
- lib
|
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - ">="
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: '0'
|
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0'
|
|
96
|
+
requirements: []
|
|
97
|
+
rubyforge_project:
|
|
98
|
+
rubygems_version: 2.6.14
|
|
99
|
+
signing_key:
|
|
100
|
+
specification_version: 4
|
|
101
|
+
summary: A Ruby library that provides functionality for sleeping while holding the
|
|
102
|
+
Global VM Lock (GVL).
|
|
103
|
+
test_files: []
|