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.
@@ -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
@@ -0,0 +1,4 @@
1
+ .bundle/
2
+ tmp/
3
+ Gemfile.lock
4
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ eval_gemfile "#{__FILE__}.local" if File.exists? "#{__FILE__}.local"
@@ -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.
@@ -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'])
@@ -0,0 +1,3 @@
1
+ require 'mkmf'
2
+
3
+ create_makefile('usleep/ext')
@@ -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
+ }
@@ -0,0 +1,4 @@
1
+ module Usleep
2
+ require 'usleep/version'
3
+ require 'usleep/ext'
4
+ end
@@ -0,0 +1,3 @@
1
+ module Usleep
2
+ VERSION = '0.0.1'.freeze
3
+ end
@@ -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
@@ -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: []