fsdb 0.5 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/{RELEASE-NOTES → History.txt} +6 -0
- data/{README → README.txt} +26 -17
- data/examples/flat.rb +146 -0
- data/examples/fsdb-example.rb +28 -0
- data/examples/rbformat.rb +17 -0
- data/examples/yaml2.rb +29 -0
- data/junk/OLDRakefile +98 -0
- data/junk/OLDRakefile2 +55 -0
- data/junk/check-cache.rb +18 -0
- data/junk/create-lock.rb +25 -0
- data/junk/doc/old-api/classes/FSDB.html +139 -0
- data/junk/doc/old-api/classes/FSDB/Database.html +953 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000029.html +16 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000030.html +16 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000031.html +16 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000032.html +16 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000033.html +33 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000034.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000035.html +22 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000036.html +16 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000037.html +22 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000038.html +43 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000039.html +25 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000040.html +43 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000041.html +23 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000042.html +22 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000043.html +16 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000044.html +16 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000045.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000046.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000047.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000048.html +16 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000049.html +71 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000050.html +43 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000051.html +53 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000052.html +44 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000053.html +39 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000054.html +72 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000055.html +39 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000056.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000057.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000058.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000059.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000060.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000061.html +23 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000062.html +23 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000063.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database.src/M000064.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Database/AbortedTransaction.html +118 -0
- data/junk/doc/old-api/classes/FSDB/Database/CreateFileError.html +120 -0
- data/junk/doc/old-api/classes/FSDB/Database/DirIsImmutableError.html +117 -0
- data/junk/doc/old-api/classes/FSDB/Database/DirNotEmptyError.html +117 -0
- data/junk/doc/old-api/classes/FSDB/Database/FormatError.html +117 -0
- data/junk/doc/old-api/classes/FSDB/Database/MissingFileError.html +117 -0
- data/junk/doc/old-api/classes/FSDB/Database/MissingObjectError.html +117 -0
- data/junk/doc/old-api/classes/FSDB/Database/NotDirError.html +118 -0
- data/junk/doc/old-api/classes/FSDB/Database/PathComponentError.html +120 -0
- data/junk/doc/old-api/classes/FSDB/DatabaseDebuggable.html +148 -0
- data/junk/doc/old-api/classes/FSDB/DatabaseDebuggable.src/M000005.html +21 -0
- data/junk/doc/old-api/classes/FSDB/DatabaseDebuggable.src/M000007.html +21 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.html +210 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000006.html +22 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000007.html +22 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000008.html +22 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000009.html +22 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000010.html +22 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000011.html +22 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000012.html +22 -0
- data/junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000013.html +22 -0
- data/junk/doc/old-api/classes/FSDB/ForkSafely.html +126 -0
- data/junk/doc/old-api/classes/FSDB/Modex.html +237 -0
- data/junk/doc/old-api/classes/FSDB/Modex.src/M000024.html +21 -0
- data/junk/doc/old-api/classes/FSDB/Modex.src/M000025.html +30 -0
- data/junk/doc/old-api/classes/FSDB/Modex.src/M000026.html +21 -0
- data/junk/doc/old-api/classes/FSDB/Modex.src/M000027.html +30 -0
- data/junk/doc/old-api/classes/FSDB/Modex.src/M000028.html +44 -0
- data/junk/doc/old-api/classes/FSDB/Modex.src/M000029.html +26 -0
- data/junk/doc/old-api/classes/FSDB/Modex.src/M000030.html +48 -0
- data/junk/doc/old-api/classes/FSDB/Modex/ForkSafely.html +105 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.html +244 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.src/M000018.html +19 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.src/M000019.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.src/M000020.html +19 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.src/M000021.html +18 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.src/M000022.html +23 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.src/M000023.html +30 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.src/M000024.html +26 -0
- data/junk/doc/old-api/classes/FSDB/Mutex.src/M000025.html +21 -0
- data/junk/doc/old-api/classes/FSDB/Mutex/ForkSafely.html +105 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.html +257 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.src/M000012.html +23 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.src/M000013.html +18 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.src/M000014.html +23 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.src/M000015.html +18 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.src/M000016.html +18 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.src/M000017.html +22 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.src/M000018.html +23 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities.src/M000019.html +18 -0
- data/junk/doc/old-api/classes/FSDB/PathUtilities/InvalidPathError.html +111 -0
- data/junk/doc/old-api/classes/File.html +272 -0
- data/junk/doc/old-api/classes/File.src/M000001.html +17 -0
- data/junk/doc/old-api/classes/File.src/M000002.html +17 -0
- data/junk/doc/old-api/classes/File.src/M000003.html +20 -0
- data/junk/doc/old-api/classes/File.src/M000004.html +20 -0
- data/junk/doc/old-api/classes/File.src/M000005.html +32 -0
- data/junk/doc/old-api/classes/File.src/M000006.html +32 -0
- data/junk/doc/old-api/created.rid +1 -0
- data/junk/doc/old-api/files/README.html +112 -0
- data/junk/doc/old-api/files/RELEASE-NOTES.html +233 -0
- data/junk/doc/old-api/files/fsdb_txt.html +888 -0
- data/junk/doc/old-api/files/lib/fsdb/database_rb.html +115 -0
- data/junk/doc/old-api/files/lib/fsdb/file-lock_rb.html +109 -0
- data/junk/doc/old-api/files/lib/fsdb/modex_rb.html +121 -0
- data/junk/doc/old-api/files/lib/fsdb/mutex_rb.html +108 -0
- data/junk/doc/old-api/files/lib/fsdb/util_rb.html +108 -0
- data/junk/doc/old-api/fr_class_index.html +47 -0
- data/junk/doc/old-api/fr_file_index.html +34 -0
- data/junk/doc/old-api/fr_method_index.html +90 -0
- data/junk/doc/old-api/index.html +24 -0
- data/junk/doc/old-api/rdoc-style.css +208 -0
- data/junk/file-lock-nb.rb +15 -0
- data/junk/fl.rb +144 -0
- data/junk/flock-test.rb +39 -0
- data/junk/fsdb.kateproject +47 -0
- data/junk/fsdb.prj +196 -0
- data/junk/fsdb.sf +46 -0
- data/junk/insert-dir.rb +48 -0
- data/junk/lock-test-bug.rb +150 -0
- data/junk/lock-test-too-simple.rb +136 -0
- data/junk/lock-test.rb +151 -0
- data/{script → junk}/mkrdoc +0 -0
- data/junk/restore-fsdb.rb +37 -0
- data/junk/rf.txt +5 -0
- data/junk/solaris-bug-fixed.rb +184 -0
- data/junk/solaris-bug.rb +182 -0
- data/junk/solaris-bug.txt +43 -0
- data/junk/sync.rb +327 -0
- data/junk/test-file-lock.html +86 -0
- data/junk/test-file-lock.rb +84 -0
- data/junk/test-processes.rb +131 -0
- data/junk/test-threads.rb +113 -0
- data/junk/wiki-mutex.rb +108 -0
- data/lib/fsdb/database.rb +5 -3
- data/lib/fsdb/delegatable.rb +21 -0
- data/lib/fsdb/faster-modex.rb +223 -0
- data/lib/fsdb/faster-mutex.rb +138 -0
- data/lib/fsdb/mutex.rb +4 -1
- data/lib/fsdb/persistent.rb +91 -0
- data/lib/fsdb/read-write-object.rb +36 -0
- data/lib/fsdb/server.rb +44 -0
- data/misc/fsdb-blorubu.txt +47 -0
- data/misc/mtime-and-file-id.txt +23 -0
- data/misc/posixlock.txt +148 -0
- data/rakefile +39 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +292 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- data/tasks/zentest.rake +36 -0
- data/test/err.txt +31 -0
- data/test/runs.rb +8 -0
- data/test/test-file-lock.rb +78 -0
- data/test/test-util.rb +1 -0
- data/test/trap.rb +31 -0
- metadata +198 -35
- data/Manifest +0 -36
- data/Rakefile +0 -10
- data/fsdb.gemspec +0 -113
data/tasks/svn.rake
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
if HAVE_SVN
|
3
|
+
|
4
|
+
unless PROJ.svn.root
|
5
|
+
info = %x/svn info ./
|
6
|
+
m = %r/^Repository Root:\s+(.*)$/.match(info)
|
7
|
+
PROJ.svn.root = (m.nil? ? '' : m[1])
|
8
|
+
end
|
9
|
+
PROJ.svn.root = File.join(PROJ.svn.root, PROJ.svn.path) unless PROJ.svn.path.empty?
|
10
|
+
|
11
|
+
namespace :svn do
|
12
|
+
|
13
|
+
# A prerequisites task that all other tasks depend upon
|
14
|
+
task :prereqs
|
15
|
+
|
16
|
+
desc 'Show tags from the SVN repository'
|
17
|
+
task :show_tags => 'svn:prereqs' do |t|
|
18
|
+
tags = %x/svn list #{File.join(PROJ.svn.root, PROJ.svn.tags)}/
|
19
|
+
tags.gsub!(%r/\/$/, '')
|
20
|
+
tags = tags.split("\n").sort {|a,b| b <=> a}
|
21
|
+
puts tags
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Create a new tag in the SVN repository'
|
25
|
+
task :create_tag => 'svn:prereqs' do |t|
|
26
|
+
v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
|
27
|
+
abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
|
28
|
+
|
29
|
+
svn = PROJ.svn
|
30
|
+
trunk = File.join(svn.root, svn.trunk)
|
31
|
+
tag = "%s-%s" % [PROJ.name, PROJ.version]
|
32
|
+
tag = File.join(svn.root, svn.tags, tag)
|
33
|
+
msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
|
34
|
+
|
35
|
+
puts "Creating SVN tag '#{tag}'"
|
36
|
+
unless system "svn cp -m '#{msg}' #{trunk} #{tag}"
|
37
|
+
abort "Tag creation failed"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end # namespace :svn
|
42
|
+
|
43
|
+
task 'gem:release' => 'svn:create_tag'
|
44
|
+
|
45
|
+
end # if PROJ.svn.path
|
46
|
+
|
47
|
+
# EOF
|
data/tasks/test.rake
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
namespace :test do
|
6
|
+
|
7
|
+
Rake::TestTask.new(:run) do |t|
|
8
|
+
t.libs = PROJ.libs
|
9
|
+
t.test_files = if test(?f, PROJ.test.file) then [PROJ.test.file]
|
10
|
+
else PROJ.test.files end
|
11
|
+
t.ruby_opts += PROJ.ruby_opts
|
12
|
+
t.ruby_opts += PROJ.test.opts
|
13
|
+
end
|
14
|
+
|
15
|
+
if HAVE_RCOV
|
16
|
+
desc 'Run rcov on the unit tests'
|
17
|
+
task :rcov => :clobber_rcov do
|
18
|
+
opts = PROJ.rcov.opts.dup << '-o' << PROJ.rcov.dir
|
19
|
+
opts = opts.join(' ')
|
20
|
+
files = if test(?f, PROJ.test.file) then [PROJ.test.file]
|
21
|
+
else PROJ.test.files end
|
22
|
+
files = files.join(' ')
|
23
|
+
sh "#{RCOV} #{files} #{opts}"
|
24
|
+
end
|
25
|
+
|
26
|
+
task :clobber_rcov do
|
27
|
+
rm_r 'coverage' rescue nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end # namespace :test
|
32
|
+
|
33
|
+
desc 'Alias to test:run'
|
34
|
+
task :test => 'test:run'
|
35
|
+
|
36
|
+
task :clobber => 'test:clobber_rcov' if HAVE_RCOV
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
# EOF
|
data/tasks/zentest.rake
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
if HAVE_ZENTEST
|
2
|
+
|
3
|
+
# --------------------------------------------------------------------------
|
4
|
+
if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
|
5
|
+
require 'autotest'
|
6
|
+
|
7
|
+
namespace :test do
|
8
|
+
task :autotest do
|
9
|
+
Autotest.run
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Run the autotest loop"
|
14
|
+
task :autotest => 'test:autotest'
|
15
|
+
|
16
|
+
end # if test
|
17
|
+
|
18
|
+
# --------------------------------------------------------------------------
|
19
|
+
if HAVE_SPEC_RAKE_SPECTASK and not PROJ.spec.files.to_a.empty?
|
20
|
+
require 'autotest/rspec'
|
21
|
+
|
22
|
+
namespace :spec do
|
23
|
+
task :autotest do
|
24
|
+
load '.autotest' if test(?f, '.autotest')
|
25
|
+
Autotest::Rspec.run
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "Run the autotest loop"
|
30
|
+
task :autotest => 'spec:autotest'
|
31
|
+
|
32
|
+
end # if rspec
|
33
|
+
|
34
|
+
end # if HAVE_ZENTEST
|
35
|
+
|
36
|
+
# EOF
|
data/test/err.txt
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
[corolla ~/ruby/prj/fsdb-0.4/test] nice -n 9 ruby test-concurrency.rb 10 1 10000
|
2
|
+
[=============================> ] 49.55800% done/usr/local/lib/ruby/1.8/yaml.rb:193:in `end_object': method `write' called on terminated object (0x804e25c) (NotImplementedError)
|
3
|
+
from /usr/local/lib/ruby/1.8/yaml.rb:193:in `quick_emit'
|
4
|
+
from /usr/local/lib/ruby/1.8/yaml/rubytypes.rb:55:in `to_yaml'
|
5
|
+
from /usr/local/lib/ruby/site_ruby/1.8/fsdb/formats.rb:138
|
6
|
+
from /usr/local/lib/ruby/site_ruby/1.8/fsdb/formats.rb:138:in `[]'
|
7
|
+
from /usr/local/lib/ruby/site_ruby/1.8/fsdb/formats.rb:60:in `dump'
|
8
|
+
from /usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:744:in `dump'
|
9
|
+
from /usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:621:in `[]='
|
10
|
+
from /usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:620:in `open_write_lock'
|
11
|
+
... 38 levels...
|
12
|
+
from test-concurrency.rb:58:in `start_processes'
|
13
|
+
from test-concurrency.rb:37:in `manage_children'
|
14
|
+
from test-concurrency.rb:31:in `run'
|
15
|
+
from test-concurrency.rb:354
|
16
|
+
test-concurrency.rb:265:in `status_meter': undefined method `[]' for false:FalseClass (NoMethodError)
|
17
|
+
from test-concurrency.rb:265:in `sum'
|
18
|
+
from test-concurrency.rb:14:in `inject'
|
19
|
+
from test-concurrency.rb:14:in `each'
|
20
|
+
from test-concurrency.rb:14:in `inject'
|
21
|
+
from test-concurrency.rb:14:in `sum'
|
22
|
+
from test-concurrency.rb:265:in `status_meter'
|
23
|
+
from test-concurrency.rb:287:in `monitor'
|
24
|
+
from test-concurrency.rb:286:in `loop'
|
25
|
+
from test-concurrency.rb:289:in `monitor'
|
26
|
+
from test-concurrency.rb:285:in `initialize'
|
27
|
+
from test-concurrency.rb:285:in `new'
|
28
|
+
from test-concurrency.rb:285:in `monitor'
|
29
|
+
from test-concurrency.rb:38:in `manage_children'
|
30
|
+
from test-concurrency.rb:31:in `run'
|
31
|
+
from test-concurrency.rb:354
|
data/test/runs.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
if ARGV.delete '-p'
|
2
|
+
require '../posixlock/posixlock'
|
3
|
+
end
|
4
|
+
|
5
|
+
$stdout.sync = true
|
6
|
+
$stderr.sync = true
|
7
|
+
|
8
|
+
Thread.abort_on_exception = true
|
9
|
+
|
10
|
+
# Apparently, locks are per descriptor. This deadlocks w/old flock, but not
|
11
|
+
# with posix (fcntl) flock:
|
12
|
+
#
|
13
|
+
File.open("/tmp/file-lock-test", "w") do |fd1|
|
14
|
+
File.open("/tmp/file-lock-test", "r") do |fd2|
|
15
|
+
fd1.write "from the writer 0"
|
16
|
+
fd1.flock(File::LOCK_EX)
|
17
|
+
fd2.flock(File::LOCK_SH)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
puts "EXITING"; exit
|
21
|
+
|
22
|
+
thread1 = Thread.new do
|
23
|
+
100.times do |i|
|
24
|
+
Thread.critical = true
|
25
|
+
File.open("/tmp/file-lock-test", "w") do |fd|
|
26
|
+
period = 0.001
|
27
|
+
until fd.flock(File::LOCK_EX|File::LOCK_NB)
|
28
|
+
Thread.critical = false
|
29
|
+
sleep period
|
30
|
+
period *= 2 if period < 1
|
31
|
+
Thread.critical = true
|
32
|
+
end
|
33
|
+
puts "Got write lock"
|
34
|
+
Thread.critical = false
|
35
|
+
|
36
|
+
fd.write "GARBAGE "*5
|
37
|
+
fd.rewind
|
38
|
+
sleep 0.0001
|
39
|
+
fd.write "from the writer #{i}"
|
40
|
+
|
41
|
+
Thread.critical = true
|
42
|
+
puts "Releasing write lock"
|
43
|
+
fd.flock(File::LOCK_UN)
|
44
|
+
Thread.critical = false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
thread2 = Thread.new do
|
50
|
+
100.times do
|
51
|
+
Thread.critical = true
|
52
|
+
File.open("/tmp/file-lock-test", "r") do |fd|
|
53
|
+
period = 0.001
|
54
|
+
until fd.flock(File::LOCK_SH|File::LOCK_NB)
|
55
|
+
Thread.critical = false
|
56
|
+
sleep period
|
57
|
+
period *= 2 if period < 1
|
58
|
+
Thread.critical = true
|
59
|
+
end
|
60
|
+
puts "Got read lock"
|
61
|
+
Thread.critical = false
|
62
|
+
|
63
|
+
s = fd.read
|
64
|
+
unless s =~ /^from the writer \d+/
|
65
|
+
raise "String was #{s.inspect}"
|
66
|
+
end
|
67
|
+
|
68
|
+
Thread.critical = true
|
69
|
+
puts "Releasing read lock"
|
70
|
+
fd.flock(File::LOCK_UN)
|
71
|
+
Thread.critical = false
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
thread1.join
|
77
|
+
thread2.join
|
78
|
+
puts "Done."
|
data/test/test-util.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
data/test/trap.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
trap 'INT' do
|
2
|
+
puts "Parent trap"
|
3
|
+
end
|
4
|
+
|
5
|
+
if false
|
6
|
+
|
7
|
+
fork do
|
8
|
+
trap "INT" do
|
9
|
+
puts "Child trap"
|
10
|
+
end
|
11
|
+
sleep
|
12
|
+
end
|
13
|
+
|
14
|
+
Process.wait
|
15
|
+
|
16
|
+
else
|
17
|
+
|
18
|
+
thread = Thread.new do
|
19
|
+
system %{
|
20
|
+
ruby -e 'trap "INT" do
|
21
|
+
puts "Child trap"
|
22
|
+
end
|
23
|
+
sleep'
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
thread.join
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
# same behavior on linux, solaris7, qnx6
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fsdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel VanderWerf
|
@@ -9,83 +9,246 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-07-18 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: bones
|
17
17
|
type: :development
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 2.5.1
|
24
24
|
version:
|
25
|
-
description:
|
26
|
-
|
25
|
+
description: |
|
26
|
+
A file system data base. Provides a thread-safe, process-safe Database class. Each entry is a separate file referenced by its relative path. Allows multiple file formats and serialization methods. Pure ruby and very light weight.
|
27
|
+
|
28
|
+
email: vjoel@users.sourceforge.net
|
27
29
|
executables: []
|
28
30
|
|
29
31
|
extensions:
|
30
32
|
- ext/fsdb/extconf.rb
|
31
33
|
extra_rdoc_files:
|
32
|
-
-
|
33
|
-
-
|
34
|
-
-
|
35
|
-
-
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
39
|
-
- test/
|
40
|
-
- test/test-mutex.rb
|
34
|
+
- History.txt
|
35
|
+
- README.txt
|
36
|
+
- junk/rf.txt
|
37
|
+
- junk/solaris-bug.txt
|
38
|
+
- misc/fsdb-blorubu.txt
|
39
|
+
- misc/mtime-and-file-id.txt
|
40
|
+
- misc/posixlock.txt
|
41
|
+
- test/err.txt
|
41
42
|
files:
|
43
|
+
- History.txt
|
44
|
+
- README.txt
|
42
45
|
- bench/bench.rb
|
43
46
|
- examples/client.rb
|
47
|
+
- examples/flat.rb
|
44
48
|
- examples/formats.rb
|
49
|
+
- examples/fsdb-example.rb
|
45
50
|
- examples/fsdb-examples.rb
|
46
51
|
- examples/indexes.rb
|
52
|
+
- examples/rbformat.rb
|
47
53
|
- examples/server.rb
|
48
54
|
- examples/simple.rb
|
49
55
|
- examples/yaml.rb
|
56
|
+
- examples/yaml2.rb
|
57
|
+
- ext/fsdb/MANIFEST
|
50
58
|
- ext/fsdb/extconf.rb
|
51
59
|
- ext/fsdb/fcntl-lock.c
|
52
|
-
-
|
60
|
+
- junk/OLDRakefile
|
61
|
+
- junk/OLDRakefile2
|
62
|
+
- junk/check-cache.rb
|
63
|
+
- junk/create-lock.rb
|
64
|
+
- junk/doc/old-api/classes/FSDB.html
|
65
|
+
- junk/doc/old-api/classes/FSDB/Database.html
|
66
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000029.html
|
67
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000030.html
|
68
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000031.html
|
69
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000032.html
|
70
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000033.html
|
71
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000034.html
|
72
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000035.html
|
73
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000036.html
|
74
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000037.html
|
75
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000038.html
|
76
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000039.html
|
77
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000040.html
|
78
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000041.html
|
79
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000042.html
|
80
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000043.html
|
81
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000044.html
|
82
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000045.html
|
83
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000046.html
|
84
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000047.html
|
85
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000048.html
|
86
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000049.html
|
87
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000050.html
|
88
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000051.html
|
89
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000052.html
|
90
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000053.html
|
91
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000054.html
|
92
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000055.html
|
93
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000056.html
|
94
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000057.html
|
95
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000058.html
|
96
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000059.html
|
97
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000060.html
|
98
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000061.html
|
99
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000062.html
|
100
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000063.html
|
101
|
+
- junk/doc/old-api/classes/FSDB/Database.src/M000064.html
|
102
|
+
- junk/doc/old-api/classes/FSDB/Database/AbortedTransaction.html
|
103
|
+
- junk/doc/old-api/classes/FSDB/Database/CreateFileError.html
|
104
|
+
- junk/doc/old-api/classes/FSDB/Database/DirIsImmutableError.html
|
105
|
+
- junk/doc/old-api/classes/FSDB/Database/DirNotEmptyError.html
|
106
|
+
- junk/doc/old-api/classes/FSDB/Database/FormatError.html
|
107
|
+
- junk/doc/old-api/classes/FSDB/Database/MissingFileError.html
|
108
|
+
- junk/doc/old-api/classes/FSDB/Database/MissingObjectError.html
|
109
|
+
- junk/doc/old-api/classes/FSDB/Database/NotDirError.html
|
110
|
+
- junk/doc/old-api/classes/FSDB/Database/PathComponentError.html
|
111
|
+
- junk/doc/old-api/classes/FSDB/DatabaseDebuggable.html
|
112
|
+
- junk/doc/old-api/classes/FSDB/DatabaseDebuggable.src/M000005.html
|
113
|
+
- junk/doc/old-api/classes/FSDB/DatabaseDebuggable.src/M000007.html
|
114
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.html
|
115
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000006.html
|
116
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000007.html
|
117
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000008.html
|
118
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000009.html
|
119
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000010.html
|
120
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000011.html
|
121
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000012.html
|
122
|
+
- junk/doc/old-api/classes/FSDB/DirectoryIterators.src/M000013.html
|
123
|
+
- junk/doc/old-api/classes/FSDB/ForkSafely.html
|
124
|
+
- junk/doc/old-api/classes/FSDB/Modex.html
|
125
|
+
- junk/doc/old-api/classes/FSDB/Modex.src/M000024.html
|
126
|
+
- junk/doc/old-api/classes/FSDB/Modex.src/M000025.html
|
127
|
+
- junk/doc/old-api/classes/FSDB/Modex.src/M000026.html
|
128
|
+
- junk/doc/old-api/classes/FSDB/Modex.src/M000027.html
|
129
|
+
- junk/doc/old-api/classes/FSDB/Modex.src/M000028.html
|
130
|
+
- junk/doc/old-api/classes/FSDB/Modex.src/M000029.html
|
131
|
+
- junk/doc/old-api/classes/FSDB/Modex.src/M000030.html
|
132
|
+
- junk/doc/old-api/classes/FSDB/Modex/ForkSafely.html
|
133
|
+
- junk/doc/old-api/classes/FSDB/Mutex.html
|
134
|
+
- junk/doc/old-api/classes/FSDB/Mutex.src/M000018.html
|
135
|
+
- junk/doc/old-api/classes/FSDB/Mutex.src/M000019.html
|
136
|
+
- junk/doc/old-api/classes/FSDB/Mutex.src/M000020.html
|
137
|
+
- junk/doc/old-api/classes/FSDB/Mutex.src/M000021.html
|
138
|
+
- junk/doc/old-api/classes/FSDB/Mutex.src/M000022.html
|
139
|
+
- junk/doc/old-api/classes/FSDB/Mutex.src/M000023.html
|
140
|
+
- junk/doc/old-api/classes/FSDB/Mutex.src/M000024.html
|
141
|
+
- junk/doc/old-api/classes/FSDB/Mutex.src/M000025.html
|
142
|
+
- junk/doc/old-api/classes/FSDB/Mutex/ForkSafely.html
|
143
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.html
|
144
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.src/M000012.html
|
145
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.src/M000013.html
|
146
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.src/M000014.html
|
147
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.src/M000015.html
|
148
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.src/M000016.html
|
149
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.src/M000017.html
|
150
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.src/M000018.html
|
151
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities.src/M000019.html
|
152
|
+
- junk/doc/old-api/classes/FSDB/PathUtilities/InvalidPathError.html
|
153
|
+
- junk/doc/old-api/classes/File.html
|
154
|
+
- junk/doc/old-api/classes/File.src/M000001.html
|
155
|
+
- junk/doc/old-api/classes/File.src/M000002.html
|
156
|
+
- junk/doc/old-api/classes/File.src/M000003.html
|
157
|
+
- junk/doc/old-api/classes/File.src/M000004.html
|
158
|
+
- junk/doc/old-api/classes/File.src/M000005.html
|
159
|
+
- junk/doc/old-api/classes/File.src/M000006.html
|
160
|
+
- junk/doc/old-api/created.rid
|
161
|
+
- junk/doc/old-api/files/README.html
|
162
|
+
- junk/doc/old-api/files/RELEASE-NOTES.html
|
163
|
+
- junk/doc/old-api/files/fsdb_txt.html
|
164
|
+
- junk/doc/old-api/files/lib/fsdb/database_rb.html
|
165
|
+
- junk/doc/old-api/files/lib/fsdb/file-lock_rb.html
|
166
|
+
- junk/doc/old-api/files/lib/fsdb/modex_rb.html
|
167
|
+
- junk/doc/old-api/files/lib/fsdb/mutex_rb.html
|
168
|
+
- junk/doc/old-api/files/lib/fsdb/util_rb.html
|
169
|
+
- junk/doc/old-api/fr_class_index.html
|
170
|
+
- junk/doc/old-api/fr_file_index.html
|
171
|
+
- junk/doc/old-api/fr_method_index.html
|
172
|
+
- junk/doc/old-api/index.html
|
173
|
+
- junk/doc/old-api/rdoc-style.css
|
174
|
+
- junk/file-lock-nb.rb
|
175
|
+
- junk/fl.rb
|
176
|
+
- junk/flock-test.rb
|
177
|
+
- junk/fsdb.kateproject
|
178
|
+
- junk/fsdb.prj
|
179
|
+
- junk/fsdb.sf
|
180
|
+
- junk/insert-dir.rb
|
181
|
+
- junk/lock-test-bug.rb
|
182
|
+
- junk/lock-test-too-simple.rb
|
183
|
+
- junk/lock-test.rb
|
184
|
+
- junk/mkrdoc
|
185
|
+
- junk/restore-fsdb.rb
|
186
|
+
- junk/rf.txt
|
187
|
+
- junk/solaris-bug-fixed.rb
|
188
|
+
- junk/solaris-bug.rb
|
189
|
+
- junk/solaris-bug.txt
|
190
|
+
- junk/sync.rb
|
191
|
+
- junk/test-file-lock.html
|
192
|
+
- junk/test-file-lock.rb
|
193
|
+
- junk/test-processes.rb
|
194
|
+
- junk/test-threads.rb
|
195
|
+
- junk/wiki-mutex.rb
|
196
|
+
- lib/fsdb.rb
|
53
197
|
- lib/fsdb/compat.rb
|
54
198
|
- lib/fsdb/database.rb
|
199
|
+
- lib/fsdb/delegatable.rb
|
200
|
+
- lib/fsdb/faster-modex.rb
|
201
|
+
- lib/fsdb/faster-mutex.rb
|
55
202
|
- lib/fsdb/file-lock.rb
|
56
|
-
- lib/fsdb/formats/yaml.rb
|
57
203
|
- lib/fsdb/formats.rb
|
204
|
+
- lib/fsdb/formats/yaml.rb
|
58
205
|
- lib/fsdb/modex.rb
|
59
206
|
- lib/fsdb/mutex.rb
|
60
207
|
- lib/fsdb/nonpersistent-attr.rb
|
208
|
+
- lib/fsdb/persistent.rb
|
61
209
|
- lib/fsdb/platform.rb
|
210
|
+
- lib/fsdb/read-write-object.rb
|
211
|
+
- lib/fsdb/server.rb
|
62
212
|
- lib/fsdb/util.rb
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
67
|
-
-
|
68
|
-
-
|
213
|
+
- misc/fsdb-blorubu.txt
|
214
|
+
- misc/mtime-and-file-id.txt
|
215
|
+
- misc/posixlock.txt
|
216
|
+
- rakefile
|
217
|
+
- tasks/ann.rake
|
218
|
+
- tasks/bones.rake
|
219
|
+
- tasks/gem.rake
|
220
|
+
- tasks/git.rake
|
221
|
+
- tasks/notes.rake
|
222
|
+
- tasks/post_load.rake
|
223
|
+
- tasks/rdoc.rake
|
224
|
+
- tasks/rubyforge.rake
|
225
|
+
- tasks/setup.rb
|
226
|
+
- tasks/spec.rake
|
227
|
+
- tasks/svn.rake
|
228
|
+
- tasks/test.rake
|
229
|
+
- tasks/zentest.rake
|
230
|
+
- test/err.txt
|
231
|
+
- test/runs.rb
|
69
232
|
- test/test-all.rb
|
233
|
+
- test/test-concurrency.rb
|
70
234
|
- test/test-concurrency/init.rb
|
71
235
|
- test/test-concurrency/test-object.rb
|
72
|
-
- test/test-
|
236
|
+
- test/test-file-lock.rb
|
73
237
|
- test/test-formats.rb
|
74
238
|
- test/test-fsdb.rb
|
75
239
|
- test/test-modex.rb
|
76
240
|
- test/test-mutex.rb
|
241
|
+
- test/test-util.rb
|
77
242
|
- test/test.rb
|
78
|
-
-
|
243
|
+
- test/trap.rb
|
79
244
|
has_rdoc: true
|
80
245
|
homepage: http://rubyforge.org/projects/fsdb/
|
246
|
+
licenses: []
|
247
|
+
|
81
248
|
post_install_message:
|
82
249
|
rdoc_options:
|
83
|
-
- --line-numbers
|
84
|
-
- --inline-source
|
85
|
-
- --title
|
86
|
-
- Fsdb
|
87
250
|
- --main
|
88
|
-
- README
|
251
|
+
- README.txt
|
89
252
|
require_paths:
|
90
253
|
- lib
|
91
254
|
- ext
|
@@ -99,14 +262,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
262
|
requirements:
|
100
263
|
- - ">="
|
101
264
|
- !ruby/object:Gem::Version
|
102
|
-
version: "
|
265
|
+
version: "0"
|
103
266
|
version:
|
104
267
|
requirements: []
|
105
268
|
|
106
|
-
rubyforge_project:
|
107
|
-
rubygems_version: 1.
|
269
|
+
rubyforge_project: fsdb
|
270
|
+
rubygems_version: 1.3.4
|
108
271
|
signing_key:
|
109
|
-
specification_version:
|
110
|
-
summary:
|
272
|
+
specification_version: 3
|
273
|
+
summary: File System Database
|
111
274
|
test_files: []
|
112
275
|
|