proc-wait3 1.5.6 → 1.6.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.
- data/CHANGES +5 -0
- data/README +13 -2
- data/Rakefile +25 -16
- data/ext/extconf.rb +13 -31
- data/ext/proc/wait3.c +14 -117
- data/proc-wait3.gemspec +3 -7
- data/test/test_proc_wait3.rb +1 -1
- metadata +26 -12
data/CHANGES
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 1.6.0 - 28-Aug-2011
|
2
|
+
* Removed the getrlimit and setrlimit methods. Ruby has supported these methods
|
3
|
+
since Ruby 1.8.5, so I think it's time to finally dump them.
|
4
|
+
* Fixed two build warnings regarding unused variables and one 32/64 cast warning.
|
5
|
+
|
1
6
|
== 1.5.6 - 7-Jan-2010
|
2
7
|
* Checks are now made for the si_fd, si_utime, si_status and si_stime siginfo_t
|
3
8
|
struct members. This addresses build failures on OS X 10.5 and later where
|
data/README
CHANGED
@@ -4,10 +4,21 @@
|
|
4
4
|
and setrlimit methods.
|
5
5
|
|
6
6
|
= Installation
|
7
|
-
|
8
7
|
gem install proc-wait3
|
9
8
|
|
10
|
-
|
9
|
+
= Synopsis
|
10
|
+
require 'proc/wait3'
|
11
|
+
|
12
|
+
pid = fork{
|
13
|
+
sleep 1
|
14
|
+
exit 2
|
15
|
+
}
|
16
|
+
|
17
|
+
puts Time.now.to_s
|
18
|
+
Process.wait3
|
19
|
+
puts $?.exitstatus # => 2
|
20
|
+
|
21
|
+
= Tested Platforms
|
11
22
|
* Solaris
|
12
23
|
* Linux
|
13
24
|
* FreeBSD
|
data/Rakefile
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
require 'rake'
|
2
|
+
require 'rake/clean'
|
2
3
|
require 'rake/testtask'
|
3
4
|
require 'fileutils'
|
5
|
+
require 'rbconfig'
|
6
|
+
include Config
|
4
7
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
CLEAN.include(
|
9
|
+
'**/*.gem', # Gem files
|
10
|
+
'**/*.rbc', # Rubinius
|
11
|
+
'**/*.o', # C object file
|
12
|
+
'**/*.log', # Ruby extension build log
|
13
|
+
'**/Makefile', # C Makefile
|
14
|
+
'**/conftest.dSYM', # OS X build directory
|
15
|
+
"**/*.#{CONFIG['DLEXT']}" # C shared object
|
16
|
+
)
|
13
17
|
|
14
18
|
desc "Build the source (but don't install it)"
|
15
19
|
task :build => [:clean] do |t|
|
@@ -20,15 +24,18 @@ task :build => [:clean] do |t|
|
|
20
24
|
end
|
21
25
|
end
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
+
namespace :gem do
|
28
|
+
desc "Create the proc-wait3 gem"
|
29
|
+
task :create => [:clean] do
|
30
|
+
spec = eval(IO.read('proc-wait3.gemspec'))
|
31
|
+
Gem::Builder.new(spec).build
|
32
|
+
end
|
27
33
|
|
28
|
-
desc "
|
29
|
-
task :
|
30
|
-
|
31
|
-
|
34
|
+
desc "Install the proc-wait3 gem"
|
35
|
+
task :install => [:create] do |t|
|
36
|
+
file = Dir['*.gem'].first
|
37
|
+
sh "gem install #{file}"
|
38
|
+
end
|
32
39
|
end
|
33
40
|
|
34
41
|
namespace :example do
|
@@ -64,3 +71,5 @@ Rake::TestTask.new do |t|
|
|
64
71
|
t.warning = true
|
65
72
|
t.verbose = true
|
66
73
|
end
|
74
|
+
|
75
|
+
task :default => :test
|
data/ext/extconf.rb
CHANGED
@@ -4,47 +4,29 @@
|
|
4
4
|
########################################################
|
5
5
|
require 'mkmf'
|
6
6
|
|
7
|
+
dir_config('proc-wait3')
|
8
|
+
|
7
9
|
# We need this for older versions of Ruby.
|
8
10
|
def have_const(const, header = nil, opt = "", &b)
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
checking_for const do
|
12
|
+
header = cpp_include(header)
|
13
|
+
if try_compile(<<"SRC", opt, &b)
|
12
14
|
#{COMMON_HEADERS}
|
13
15
|
#{header}
|
14
16
|
/* top */
|
15
17
|
static int t = #{const};
|
16
18
|
SRC
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
else
|
25
|
-
false
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Check to see if Ruby has already defined the various RLIMIT constants
|
31
|
-
# and set an appropriate macro in the source.
|
32
|
-
#
|
33
|
-
begin
|
34
|
-
Process::RLIMIT_AS
|
35
|
-
rescue
|
36
|
-
check_sizeof('int')
|
37
|
-
check_sizeof('long')
|
38
|
-
check_sizeof('long long')
|
39
|
-
unless check_sizeof('rlim_t', 'sys/resource.h')
|
40
|
-
if (2**33).is_a?(Fixnum)
|
41
|
-
$defs.push('-DSIZEOF_RLIM_T 8') # 64 bit
|
19
|
+
$defs.push(
|
20
|
+
format(
|
21
|
+
"-DHAVE_CONST_%s",
|
22
|
+
const.strip.upcase.tr_s("^A-Z0-9_", "_")
|
23
|
+
)
|
24
|
+
)
|
25
|
+
true
|
42
26
|
else
|
43
|
-
|
27
|
+
false
|
44
28
|
end
|
45
29
|
end
|
46
|
-
else
|
47
|
-
$defs.push('-DRUBY_HAS_RLIMIT') # Used within wait.c
|
48
30
|
end
|
49
31
|
|
50
32
|
have_header('wait.h')
|
data/ext/proc/wait3.c
CHANGED
@@ -320,7 +320,6 @@ static VALUE proc_waitid(int argc, VALUE* argv, VALUE mod){
|
|
320
320
|
idtype_t idtype;
|
321
321
|
id_t id = 0;
|
322
322
|
int options = 0;
|
323
|
-
int i = 0;
|
324
323
|
|
325
324
|
rb_scan_args(argc, argv, "12", &v_type, &v_id, &v_options);
|
326
325
|
|
@@ -395,7 +394,10 @@ static VALUE proc_waitid(int argc, VALUE* argv, VALUE mod){
|
|
395
394
|
);
|
396
395
|
}
|
397
396
|
else{
|
398
|
-
VALUE v_utime = Qnil, v_status = Qnil, v_stime = Qnil
|
397
|
+
VALUE v_utime = Qnil, v_status = Qnil, v_stime = Qnil;
|
398
|
+
#ifdef HAVE_ST_SI_FD
|
399
|
+
VALUE v_fd = Qnil;
|
400
|
+
#endif
|
399
401
|
#ifdef HAVE_ST_SI_TRAPNO
|
400
402
|
VALUE v_trapno = Qnil;
|
401
403
|
#endif
|
@@ -427,6 +429,10 @@ static VALUE proc_waitid(int argc, VALUE* argv, VALUE mod){
|
|
427
429
|
int sig = infop.si_signo;
|
428
430
|
int code = infop.si_code;
|
429
431
|
|
432
|
+
#if defined(HAVE_ST_SI_SYSARG) || defined(HAVE_ST_SI_MSTATE)
|
433
|
+
int i = 0;
|
434
|
+
#endif
|
435
|
+
|
430
436
|
/* If Process.waitid returns because a child process was found that
|
431
437
|
* satisfies the conditions indicated by +id_type+ and +options+, then
|
432
438
|
* the si_signo struct member will always be SIGCHLD.
|
@@ -570,12 +576,14 @@ static VALUE proc_waitid(int argc, VALUE* argv, VALUE mod){
|
|
570
576
|
*/
|
571
577
|
static VALUE proc_pause(int argc, VALUE* argv, VALUE mod){
|
572
578
|
VALUE v_signals;
|
573
|
-
int i
|
579
|
+
int i;
|
580
|
+
long len;
|
574
581
|
|
575
582
|
rb_scan_args(argc, argv, "0*", &v_signals);
|
576
583
|
|
577
|
-
|
584
|
+
// Iterate over each signal, calling sigset for each one
|
578
585
|
len = RARRAY_LEN(v_signals);
|
586
|
+
|
579
587
|
if(len > 0){
|
580
588
|
VALUE v_val;
|
581
589
|
char signame[SIG2STR_MAX];
|
@@ -760,66 +768,6 @@ static VALUE proc_getrusage(int argc, VALUE* argv, VALUE mod){
|
|
760
768
|
}
|
761
769
|
#endif
|
762
770
|
|
763
|
-
#ifndef RUBY_HAS_RLIMIT
|
764
|
-
/*
|
765
|
-
* call-seq:
|
766
|
-
* Process.getrlimit(resource) => [cur_limit, max_limit]
|
767
|
-
*
|
768
|
-
* Returns a two element array consisting of the hard and soft limit
|
769
|
-
* for the current process for the given +resource+. The array consists of
|
770
|
-
* either numeric values or the word "infinite".
|
771
|
-
*/
|
772
|
-
static VALUE proc_getrlimit(VALUE mod, VALUE v_resource){
|
773
|
-
struct rlimit limits;
|
774
|
-
VALUE v_array = rb_ary_new();
|
775
|
-
|
776
|
-
rb_secure(2);
|
777
|
-
|
778
|
-
if(getrlimit(NUM2INT(v_resource), &limits) < 0)
|
779
|
-
rb_sys_fail("getrlimit");
|
780
|
-
|
781
|
-
if(limits.rlim_cur == RLIM_INFINITY)
|
782
|
-
rb_ary_push(v_array, rb_str_new2("infinity"));
|
783
|
-
else
|
784
|
-
rb_ary_push(v_array, INT2FIX(limits.rlim_cur));
|
785
|
-
|
786
|
-
if(limits.rlim_max == RLIM_INFINITY)
|
787
|
-
rb_ary_push(v_array, rb_str_new2("infinity"));
|
788
|
-
else
|
789
|
-
rb_ary_push(v_array, INT2FIX(limits.rlim_max));
|
790
|
-
|
791
|
-
return v_array;
|
792
|
-
}
|
793
|
-
|
794
|
-
/*
|
795
|
-
* call-seq:
|
796
|
-
* Process.setrlimit(resource, current, max=nil) => nil
|
797
|
-
*
|
798
|
-
* Sets the +current+ (soft) and +max+ (hard) limit for the given +resource+
|
799
|
-
* for the current process. If +max+ is nil it is set to the same value as
|
800
|
-
* +current+.
|
801
|
-
*/
|
802
|
-
static VALUE proc_setrlimit(int argc, VALUE* argv, VALUE mod){
|
803
|
-
VALUE v_res, v_cur, v_max;
|
804
|
-
struct rlimit limits;
|
805
|
-
|
806
|
-
rb_secure(2);
|
807
|
-
|
808
|
-
rb_scan_args(argc, argv, "21", &v_res, &v_cur, &v_max);
|
809
|
-
|
810
|
-
if(NIL_P(v_max))
|
811
|
-
v_max = v_cur;
|
812
|
-
|
813
|
-
limits.rlim_cur = RLIM2NUM(v_cur);
|
814
|
-
limits.rlim_max = RLIM2NUM(v_max);
|
815
|
-
|
816
|
-
if(setrlimit(NUM2UINT(v_res), &limits) < 0)
|
817
|
-
rb_sys_fail("setrlimit");
|
818
|
-
|
819
|
-
return Qnil;
|
820
|
-
}
|
821
|
-
#endif
|
822
|
-
|
823
771
|
#ifdef HAVE_GETDTABLESIZE
|
824
772
|
/*
|
825
773
|
* call-seq:
|
@@ -851,11 +799,6 @@ void Init_wait3()
|
|
851
799
|
rb_define_module_function(rb_mProcess, "wait3", proc_wait3, -1);
|
852
800
|
rb_define_module_function(rb_mProcess, "pause", proc_pause, -1);
|
853
801
|
|
854
|
-
#ifndef RUBY_HAS_RLIMIT
|
855
|
-
rb_define_module_function(rb_mProcess, "getrlimit", proc_getrlimit, 1);
|
856
|
-
rb_define_module_function(rb_mProcess, "setrlimit", proc_setrlimit, -1);
|
857
|
-
#endif
|
858
|
-
|
859
802
|
#ifdef HAVE_GETDTABLESIZE
|
860
803
|
rb_define_module_function(rb_mProcess,"getdtablesize",proc_getdtablesize,0);
|
861
804
|
#endif
|
@@ -1006,54 +949,8 @@ void Init_wait3()
|
|
1006
949
|
rb_define_const(rb_mProcess, "P_PROJID", INT2FIX(P_PROJID));
|
1007
950
|
#endif
|
1008
951
|
|
1009
|
-
/*
|
1010
|
-
|
1011
|
-
* or earlier.
|
1012
|
-
*/
|
1013
|
-
#ifndef RUBY_HAS_RLIMIT
|
1014
|
-
/* Maximum size of the process' mapped address space, in bytes */
|
1015
|
-
rb_define_const(rb_mProcess, "RLIMIT_AS", INT2FIX(RLIMIT_AS));
|
1016
|
-
|
1017
|
-
/* Maximum size of a core file in bytes that may be created */
|
1018
|
-
rb_define_const(rb_mProcess, "RLIMIT_CORE", INT2FIX(RLIMIT_CORE));
|
1019
|
-
|
1020
|
-
/* Maximum amount of CPU time, in seconds, the process is allowed to use */
|
1021
|
-
rb_define_const(rb_mProcess, "RLIMIT_CPU", INT2FIX(RLIMIT_CPU));
|
1022
|
-
|
1023
|
-
/* Maximum size of the process' heap, in bytes */
|
1024
|
-
rb_define_const(rb_mProcess, "RLIMIT_DATA", INT2FIX(RLIMIT_DATA));
|
1025
|
-
|
1026
|
-
/* Maximum size of a file, in bytes, that the process may create */
|
1027
|
-
rb_define_const(rb_mProcess, "RLIMIT_FSIZE", INT2FIX(RLIMIT_FSIZE));
|
1028
|
-
|
1029
|
-
/* The maximum value that the kernel may assign to a file descriptor */
|
1030
|
-
rb_define_const(rb_mProcess, "RLIMIT_NOFILE", INT2FIX(RLIMIT_NOFILE));
|
1031
|
-
|
1032
|
-
/* The maximum size of the process' stack, in bytes */
|
1033
|
-
rb_define_const(rb_mProcess, "RLIMIT_STACK", INT2FIX(RLIMIT_STACK));
|
1034
|
-
|
1035
|
-
/* No limit on the resource */
|
1036
|
-
rb_define_const(rb_mProcess, "RLIM_INFINITY", RLIM2NUM(RLIM_INFINITY));
|
1037
|
-
|
1038
|
-
/* Set the limit to the corresponding saved hard limit */
|
1039
|
-
rb_define_const(rb_mProcess, "RLIM_SAVED_MAX", RLIM2NUM(RLIM_SAVED_MAX));
|
1040
|
-
|
1041
|
-
/* Set the limit to the corresponding saved soft limit */
|
1042
|
-
rb_define_const(rb_mProcess, "RLIM_SAVED_CUR", RLIM2NUM(RLIM_SAVED_CUR));
|
1043
|
-
|
1044
|
-
#ifdef RLIMIT_MEMLOCK
|
1045
|
-
/* The maximum number of bytes that may be locked into RAM */
|
1046
|
-
rb_define_const(rb_mProcess, "RLIMIT_MEMLOCK", INT2FIX(RLIMIT_MEMLOCK));
|
1047
|
-
#endif
|
1048
|
-
|
1049
|
-
#ifdef RLIMIT_VMEM
|
1050
|
-
/* Synonym for RLIMIT_AS */
|
1051
|
-
rb_define_const(rb_mProcess, "RLIMIT_VMEM", INT2FIX(RLIMIT_VMEM));
|
1052
|
-
#endif
|
1053
|
-
#endif
|
1054
|
-
|
1055
|
-
/* 1.5.6: The version of the proc-wait3 library */
|
1056
|
-
rb_define_const(rb_mProcess, "WAIT3_VERSION", rb_str_new2("1.5.6"));
|
952
|
+
/* 1.6.0: The version of the proc-wait3 library */
|
953
|
+
rb_define_const(rb_mProcess, "WAIT3_VERSION", rb_str_new2("1.6.0"));
|
1057
954
|
|
1058
955
|
/* Define this last in our Init_wait3 function */
|
1059
956
|
rb_define_readonly_variable("$?", &v_last_status);
|
data/proc-wait3.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'proc-wait3'
|
5
|
-
spec.version = '1.
|
5
|
+
spec.version = '1.6.0'
|
6
6
|
spec.author = 'Daniel J. Berger'
|
7
7
|
spec.license = 'Artistic 2.0'
|
8
8
|
spec.email = 'djberg96@gmail.com'
|
@@ -10,20 +10,16 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.platform = Gem::Platform::RUBY
|
11
11
|
spec.summary = 'Adds wait3, wait4 and other methods to the Process module'
|
12
12
|
spec.test_file = 'test/test_proc_wait3.rb'
|
13
|
-
spec.has_rdoc = true
|
14
13
|
spec.extensions = ['ext/extconf.rb']
|
15
14
|
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
16
15
|
|
17
|
-
spec.required_ruby_version = '>= 1.8.2'
|
18
|
-
|
19
16
|
spec.rubyforge_project = 'shards'
|
20
17
|
spec.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST', 'ext/proc/wait3.c']
|
21
18
|
|
22
|
-
spec.add_development_dependency('test-unit', '>= 2.0
|
19
|
+
spec.add_development_dependency('test-unit', '>= 2.1.0')
|
23
20
|
|
24
21
|
spec.description = <<-EOF
|
25
22
|
The proc-wait3 library adds the wait3, wait4, waitid, pause, sigsend,
|
26
|
-
and getrusage methods to the Process module.
|
27
|
-
and setrlimit methods for Ruby 1.8.4 or earlier.
|
23
|
+
and getrusage methods to the Process module.
|
28
24
|
EOF
|
29
25
|
end
|
data/test/test_proc_wait3.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proc-wait3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 6
|
8
|
+
- 0
|
9
|
+
version: 1.6.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Daniel J. Berger
|
@@ -9,20 +14,25 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2011-08-28 00:00:00 -06:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: test-unit
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ">="
|
22
27
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
25
|
-
|
28
|
+
segments:
|
29
|
+
- 2
|
30
|
+
- 1
|
31
|
+
- 0
|
32
|
+
version: 2.1.0
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
35
|
+
description: " The proc-wait3 library adds the wait3, wait4, waitid, pause, sigsend,\n and getrusage methods to the Process module.\n"
|
26
36
|
email: djberg96@gmail.com
|
27
37
|
executables: []
|
28
38
|
|
@@ -58,21 +68,25 @@ rdoc_options: []
|
|
58
68
|
require_paths:
|
59
69
|
- lib
|
60
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
61
72
|
requirements:
|
62
73
|
- - ">="
|
63
74
|
- !ruby/object:Gem::Version
|
64
|
-
|
65
|
-
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
66
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
67
80
|
requirements:
|
68
81
|
- - ">="
|
69
82
|
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 0
|
70
85
|
version: "0"
|
71
|
-
version:
|
72
86
|
requirements: []
|
73
87
|
|
74
88
|
rubyforge_project: shards
|
75
|
-
rubygems_version: 1.3.
|
89
|
+
rubygems_version: 1.3.7
|
76
90
|
signing_key:
|
77
91
|
specification_version: 3
|
78
92
|
summary: Adds wait3, wait4 and other methods to the Process module
|