lockf.rb 0.13.0 → 1.0.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/.clang-format +11 -0
- data/.rubocop.yml +5 -1
- data/Gemfile +0 -1
- data/README.md +7 -10
- data/Rakefile.rb +10 -9
- data/ext/lockf.rb/lockf.c +6 -4
- data/lib/lockf/version.rb +1 -1
- data/lib/lockf.rb +8 -5
- data/lockf.rb.gemspec +5 -8
- data/share/lockf.rb/examples/1_lockfile_blocking_variant.rb +1 -1
- data/share/lockf.rb/examples/2_lockfile_nonblocking_variant.rb +1 -1
- data/test/lock_file_test.rb +4 -4
- data/test/readme_test.rb +0 -2
- metadata +16 -58
- data/ext/lockf.rb/lockf.h +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 05e204191db7552902307b79f09636be97f36fba053a89c5ab849c6dd0205830
|
4
|
+
data.tar.gz: 82167b478eae279325094a0ba29b8d75500dc6d0a53ea32fd24ed0ef200fa643
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31b69f15f99e3a4b6f522de3b708130ee67ab3a3c5498df989e034bf281f0c02463f360d948150ca9cd562e85a9fd4a8d802d27dad6fa014e289abaa33c6f5d6
|
7
|
+
data.tar.gz: 8b9d9b5979cf813a0234054531e0fe4e6d7c7be83221f49540aeaec97d94347db851756fece830b4f711da42683d4195589f7d3578264a232d6aedd37d7d0377
|
data/.clang-format
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
BasedOnStyle: LLVM
|
2
|
+
IndentWidth: 2
|
3
|
+
SortIncludes: false
|
4
|
+
UseTab: Never
|
5
|
+
BreakBeforeBraces: Allman
|
6
|
+
AllowShortFunctionsOnASingleLine: Inline
|
7
|
+
AlwaysBreakAfterDefinitionReturnType: TopLevel
|
8
|
+
BreakBeforeBinaryOperators: All
|
9
|
+
BinPackArguments: false
|
10
|
+
AlignConsecutiveAssignments: true
|
11
|
+
AlwaysBreakAfterReturnType: None
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -7,14 +7,6 @@ The
|
|
7
7
|
function implements an advisory-mode lock that can be placed on select
|
8
8
|
regions of a file, or on the entire contents of a file.
|
9
9
|
|
10
|
-
[lockf(3)](https://man.freebsd.org/cgi/man.cgi?query=lockf&sektion=3)
|
11
|
-
can synchronize access to a file between multiple processes, or
|
12
|
-
synchronize access to a shared resource being accessed by multiple
|
13
|
-
processes at the same time. When used with a shared resource,
|
14
|
-
[lockf(3)](https://man.freebsd.org/cgi/man.cgi?query=lockf&sektion=3)
|
15
|
-
can provide something similar to a mutex that works across multiple
|
16
|
-
processes rather than multiple threads.
|
17
|
-
|
18
10
|
## Examples
|
19
11
|
|
20
12
|
### LockFile
|
@@ -43,7 +35,7 @@ end
|
|
43
35
|
sleep(3)
|
44
36
|
lockf.release
|
45
37
|
Process.wait(pid)
|
46
|
-
lockf.
|
38
|
+
lockf.close
|
47
39
|
|
48
40
|
##
|
49
41
|
# Lock acquired by parent process (2023-02-11 16:43:15 UTC)
|
@@ -75,7 +67,7 @@ end
|
|
75
67
|
sleep 3
|
76
68
|
lockf.release
|
77
69
|
Process.wait(pid)
|
78
|
-
lockf.
|
70
|
+
lockf.close
|
79
71
|
|
80
72
|
##
|
81
73
|
# Lock acquired by parent process (2023-02-11 19:03:05 UTC)
|
@@ -130,6 +122,11 @@ file.close
|
|
130
122
|
# Lock released
|
131
123
|
```
|
132
124
|
|
125
|
+
## Documentation
|
126
|
+
|
127
|
+
A complete API reference is available at
|
128
|
+
[0x1eef.github.io/x/lockf.rb](https://0x1eef.github.io/x/lockf.rb).
|
129
|
+
|
133
130
|
## Install
|
134
131
|
|
135
132
|
**Rubygems.org**
|
data/Rakefile.rb
CHANGED
@@ -2,21 +2,22 @@ require "bundler/setup"
|
|
2
2
|
require "rake/extensiontask"
|
3
3
|
require "rake/testtask"
|
4
4
|
|
5
|
-
namespace :
|
6
|
-
desc "Run
|
7
|
-
task :
|
8
|
-
sh "
|
5
|
+
namespace :clang do
|
6
|
+
desc "Run clang-format"
|
7
|
+
task :format do
|
8
|
+
sh "clang-format -style=file:.clang-format -i ext/lockf.rb/*.c"
|
9
9
|
end
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
namespace :ruby do
|
13
|
+
desc "Run rubocop"
|
14
|
+
task :format do
|
15
|
+
sh "bundle exec rubocop -A"
|
14
16
|
end
|
15
17
|
end
|
16
|
-
task
|
18
|
+
task format: %w[clang:format ruby:format]
|
17
19
|
|
18
20
|
Rake::ExtensionTask.new("lockf.rb")
|
19
|
-
|
20
21
|
Rake::TestTask.new do |t|
|
21
22
|
t.test_files = FileList["test/*_test.rb"]
|
22
23
|
t.verbose = true
|
data/ext/lockf.rb/lockf.c
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#include <ruby.h>
|
2
2
|
#include <unistd.h>
|
3
3
|
#include <errno.h>
|
4
|
-
#include "lockf.h"
|
5
4
|
|
6
5
|
static VALUE
|
7
6
|
lockf_lock(VALUE self, VALUE fd, VALUE cmd, VALUE len)
|
@@ -11,11 +10,14 @@ lockf_lock(VALUE self, VALUE fd, VALUE cmd, VALUE len)
|
|
11
10
|
Check_Type(fd, T_FIXNUM);
|
12
11
|
Check_Type(cmd, T_FIXNUM);
|
13
12
|
Check_Type(len, T_FIXNUM);
|
14
|
-
errno
|
13
|
+
errno = 0;
|
15
14
|
result = lockf(NUM2INT(fd), NUM2INT(cmd), NUM2INT(len));
|
16
|
-
if (result == 0)
|
15
|
+
if (result == 0)
|
16
|
+
{
|
17
17
|
return INT2NUM(result);
|
18
|
-
}
|
18
|
+
}
|
19
|
+
else
|
20
|
+
{
|
19
21
|
rb_syserr_fail(errno, "lockf");
|
20
22
|
}
|
21
23
|
}
|
data/lib/lockf/version.rb
CHANGED
data/lib/lockf.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
##
|
2
2
|
# The
|
3
|
-
# [
|
4
|
-
# class provides a Ruby
|
3
|
+
# [LockFile](https://0x1eef.github.io/x/lockf.rb/LockFile.html)
|
4
|
+
# class provides a Ruby interface to
|
5
5
|
# [lockf(3)](https://man.freebsd.org/cgi/man.cgi?query=lockf&sektion=3).
|
6
6
|
class LockFile
|
7
7
|
require "tmpdir"
|
@@ -79,7 +79,8 @@ class LockFile
|
|
79
79
|
end
|
80
80
|
|
81
81
|
##
|
82
|
-
# Acquire a lock (blocking)
|
82
|
+
# Acquire a lock (blocking).
|
83
|
+
#
|
83
84
|
# @raise [Errno::EBADF]
|
84
85
|
# @raise [Errno::EDEADLK]
|
85
86
|
# @raise [Errno::EINTR]
|
@@ -94,7 +95,8 @@ class LockFile
|
|
94
95
|
end
|
95
96
|
|
96
97
|
##
|
97
|
-
# Acquire a lock (non-blocking)
|
98
|
+
# Acquire a lock (non-blocking).
|
99
|
+
#
|
98
100
|
# @raise [Errno::EAGAIN]
|
99
101
|
# @raise [Errno::EBADF]
|
100
102
|
# @raise [Errno::ENOLCK]
|
@@ -105,7 +107,8 @@ class LockFile
|
|
105
107
|
end
|
106
108
|
|
107
109
|
##
|
108
|
-
# Release a lock
|
110
|
+
# Release a lock.
|
111
|
+
#
|
109
112
|
# @raise [Errno::EBADF]
|
110
113
|
# @raise [Errno::ENOLCK]
|
111
114
|
# @return [Integer]
|
data/lockf.rb.gemspec
CHANGED
@@ -13,12 +13,9 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.summary = "Ruby bindings for lockf(3)"
|
14
14
|
gem.description = gem.summary
|
15
15
|
gem.add_development_dependency "yard", "~> 0.9"
|
16
|
-
gem.add_development_dependency "
|
17
|
-
gem.add_development_dependency "
|
18
|
-
gem.add_development_dependency "
|
19
|
-
gem.add_development_dependency "
|
20
|
-
gem.add_development_dependency "
|
21
|
-
gem.add_development_dependency "rack", "~> 3.0"
|
22
|
-
gem.add_development_dependency "rackup", "~> 2.1"
|
23
|
-
gem.add_development_dependency "test-cmd.rb", "~> 0.4"
|
16
|
+
gem.add_development_dependency "standard", "~> 1.12"
|
17
|
+
gem.add_development_dependency "rubocop", "~> 1.29"
|
18
|
+
gem.add_development_dependency "test-unit", "~> 3.5"
|
19
|
+
gem.add_development_dependency "rake-compiler", "~> 1.2"
|
20
|
+
gem.add_development_dependency "test-cmd.rb", "~> 0.6"
|
24
21
|
end
|
data/test/lock_file_test.rb
CHANGED
@@ -4,7 +4,7 @@ class LockFile::Test < Test::Unit::TestCase
|
|
4
4
|
attr_reader :lockf
|
5
5
|
|
6
6
|
def setup
|
7
|
-
@file
|
7
|
+
@file = Tempfile.new("lockf-test").tap(&:unlink)
|
8
8
|
@lockf = LockFile.new(file)
|
9
9
|
end
|
10
10
|
|
@@ -13,7 +13,7 @@ class LockFile::Test < Test::Unit::TestCase
|
|
13
13
|
end
|
14
14
|
|
15
15
|
##
|
16
|
-
#
|
16
|
+
# LockFile#lock
|
17
17
|
def test_lock
|
18
18
|
assert_equal 0, lockf.lock
|
19
19
|
ensure
|
@@ -30,7 +30,7 @@ class LockFile::Test < Test::Unit::TestCase
|
|
30
30
|
end
|
31
31
|
|
32
32
|
##
|
33
|
-
#
|
33
|
+
# LockFile#lock_nonblock
|
34
34
|
def test_lock_nonblock
|
35
35
|
assert_equal 0, lockf.lock_nonblock
|
36
36
|
ensure
|
@@ -47,7 +47,7 @@ class LockFile::Test < Test::Unit::TestCase
|
|
47
47
|
end
|
48
48
|
|
49
49
|
##
|
50
|
-
#
|
50
|
+
# LockFile#locked?
|
51
51
|
def test_locked?
|
52
52
|
pid = fork_sleep { lockf.lock }
|
53
53
|
sleep(0.1)
|
data/test/readme_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lockf.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- '0x1eef'
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
@@ -25,117 +25,75 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: standard
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.12'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: standard
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.12.1
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.12.1
|
40
|
+
version: '1.12'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rubocop
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - '='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.29.1
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 1.29.1
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: test-unit
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
72
44
|
requirements:
|
73
45
|
- - "~>"
|
74
46
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
47
|
+
version: '1.29'
|
76
48
|
type: :development
|
77
49
|
prerelease: false
|
78
50
|
version_requirements: !ruby/object:Gem::Requirement
|
79
51
|
requirements:
|
80
52
|
- - "~>"
|
81
53
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake-compiler
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.2.0
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - '='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 1.2.0
|
54
|
+
version: '1.29'
|
97
55
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
56
|
+
name: test-unit
|
99
57
|
requirement: !ruby/object:Gem::Requirement
|
100
58
|
requirements:
|
101
59
|
- - "~>"
|
102
60
|
- !ruby/object:Gem::Version
|
103
|
-
version: '3.
|
61
|
+
version: '3.5'
|
104
62
|
type: :development
|
105
63
|
prerelease: false
|
106
64
|
version_requirements: !ruby/object:Gem::Requirement
|
107
65
|
requirements:
|
108
66
|
- - "~>"
|
109
67
|
- !ruby/object:Gem::Version
|
110
|
-
version: '3.
|
68
|
+
version: '3.5'
|
111
69
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
70
|
+
name: rake-compiler
|
113
71
|
requirement: !ruby/object:Gem::Requirement
|
114
72
|
requirements:
|
115
73
|
- - "~>"
|
116
74
|
- !ruby/object:Gem::Version
|
117
|
-
version: '2
|
75
|
+
version: '1.2'
|
118
76
|
type: :development
|
119
77
|
prerelease: false
|
120
78
|
version_requirements: !ruby/object:Gem::Requirement
|
121
79
|
requirements:
|
122
80
|
- - "~>"
|
123
81
|
- !ruby/object:Gem::Version
|
124
|
-
version: '2
|
82
|
+
version: '1.2'
|
125
83
|
- !ruby/object:Gem::Dependency
|
126
84
|
name: test-cmd.rb
|
127
85
|
requirement: !ruby/object:Gem::Requirement
|
128
86
|
requirements:
|
129
87
|
- - "~>"
|
130
88
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0.
|
89
|
+
version: '0.6'
|
132
90
|
type: :development
|
133
91
|
prerelease: false
|
134
92
|
version_requirements: !ruby/object:Gem::Requirement
|
135
93
|
requirements:
|
136
94
|
- - "~>"
|
137
95
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0.
|
96
|
+
version: '0.6'
|
139
97
|
description: Ruby bindings for lockf(3)
|
140
98
|
email:
|
141
99
|
- 0x1eef@protonmail.com
|
@@ -145,6 +103,7 @@ extensions:
|
|
145
103
|
extra_rdoc_files: []
|
146
104
|
files:
|
147
105
|
- ".bundle/config"
|
106
|
+
- ".clang-format"
|
148
107
|
- ".github/workflows/tests.yml"
|
149
108
|
- ".gitignore"
|
150
109
|
- ".projectile"
|
@@ -157,7 +116,6 @@ files:
|
|
157
116
|
- Rakefile.rb
|
158
117
|
- ext/lockf.rb/extconf.rb
|
159
118
|
- ext/lockf.rb/lockf.c
|
160
|
-
- ext/lockf.rb/lockf.h
|
161
119
|
- lib/lockf.rb
|
162
120
|
- lib/lockf/version.rb
|
163
121
|
- lockf.rb.gemspec
|
data/ext/lockf.rb/lockf.h
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
void Init_lockf(void);
|