process_starter 1.0.12 → 1.0.13

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.
Files changed (2) hide show
  1. data/lib/process_starter.rb +11 -5
  2. metadata +4 -4
@@ -43,8 +43,9 @@ module ProcessStarter
43
43
  # -w = current working directory
44
44
  r = system("psexec -d -w #{Dir.pwd} #{s}")
45
45
  else
46
- log "starting using START cmd /c (inherits descriptors (?) - bad)"
47
- close_io(true)
46
+ log "starting using START cmd /c (inherits descriptors (?) - THIS IS BAD, PLEASE DOWNLOAD and COPY PSEXEC TO AVAILABLE 'PATH')"
47
+ # CANNOT call close_io here, because it will close descriptors in current (parent) process
48
+ # close_io(true,true)
48
49
  system("start /b cmd /c #{s}")
49
50
  end
50
51
  else
@@ -93,6 +94,7 @@ module ProcessStarter
93
94
  def self.close_io( do_close=false, debug = false )
94
95
  close_them = []
95
96
  # Make sure all input/output streams are closed
97
+ puts "close_io: Part I" if debug
96
98
  # Part I: close all IO objects (except for STDIN/STDOUT/STDERR)
97
99
  ObjectSpace.each_object(IO) do |io|
98
100
  unless [STDIN, STDOUT, STDERR].include?(io)
@@ -101,6 +103,7 @@ module ProcessStarter
101
103
  # puts io.fcntl(Fcntl::F_GETFD) & Fcntl::FD_CLOEXEC
102
104
  if (not io.closed?) and (io.fcntl(Fcntl::F_GETFD) & Fcntl::FD_CLOEXEC) == 0
103
105
  close_them << io.to_i
106
+ puts "Closing #{io.inspect}" if debug
104
107
  io.close if do_close
105
108
  end
106
109
  rescue ::Exception
@@ -108,12 +111,12 @@ module ProcessStarter
108
111
  end
109
112
  end
110
113
  # puts close_them.inspect
111
-
114
+
115
+ puts "close_io: Part II" if debug
112
116
  # Make sure all input/output streams are closed
113
117
  # Part II: close all file decriptors (except for STDIN/STDOUT/STDERR)
114
118
  ios = Array.new(8192) {|i| IO.for_fd(i) rescue nil}.compact
115
119
  ios.each do |io|
116
- puts "qqq" if debug
117
120
  puts io.to_i if debug
118
121
  next if io.fileno < 3
119
122
  puts "checking flag" if debug
@@ -124,7 +127,10 @@ module ProcessStarter
124
127
  next if r
125
128
  # puts "adding"
126
129
  close_them << io.to_i
127
- io.close if do_close
130
+ if do_close
131
+ puts "Closing #{io.inspect}" if debug
132
+ io.close ### rescue nil -- DO NOT need to have rescue here, because if we cannot close - it is some kind of exception which need to be tracked
133
+ end
128
134
  end
129
135
  # puts close_them.inspect
130
136
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: process_starter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 12
10
- version: 1.0.12
9
+ - 13
10
+ version: 1.0.13
11
11
  platform: ruby
12
12
  authors:
13
13
  - Pavel Vasev
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-22 00:00:00 Z
18
+ date: 2013-06-13 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: A gem for Ruby 1.8 to start process in parallel, 1) don't wait for it finish 2) dont inherit io file handles 3) both in windows/linux. Ruby 1.9 dont need it because it has spawn method.