Skip to content

Commit 389e87f

Browse files
author
Petr Chalupa
authored
Merge pull request #576 from matthewd/popen-close
Use block form of IO.popen to prevent zombies
2 parents 183f4e6 + 0371ed4 commit 389e87f

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

lib/concurrent/utility/processor_counter.rb

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,28 +85,26 @@ def compute_processor_count
8585
result = WIN32OLE.connect("winmgmts://").ExecQuery(
8686
"select NumberOfLogicalProcessors from Win32_Processor")
8787
result.to_enum.collect(&:NumberOfLogicalProcessors).reduce(:+)
88+
elsif File.readable?("/proc/cpuinfo") && (cpuinfo_count = IO.read("/proc/cpuinfo").scan(/^processor/).size) > 0
89+
cpuinfo_count
8890
elsif File.executable?("/usr/bin/nproc")
89-
IO.popen("/usr/bin/nproc --all").read.to_i
90-
elsif File.readable?("/proc/cpuinfo")
91-
IO.read("/proc/cpuinfo").scan(/^processor/).size
91+
IO.popen("/usr/bin/nproc --all", &:read).to_i
9292
elsif File.executable?("/usr/bin/hwprefs")
93-
IO.popen("/usr/bin/hwprefs thread_count").read.to_i
93+
IO.popen("/usr/bin/hwprefs thread_count", &:read).to_i
9494
elsif File.executable?("/usr/sbin/psrinfo")
95-
IO.popen("/usr/sbin/psrinfo").read.scan(/^.*on-*line/).size
95+
IO.popen("/usr/sbin/psrinfo", &:read).scan(/^.*on-*line/).size
9696
elsif File.executable?("/usr/sbin/ioscan")
97-
IO.popen("/usr/sbin/ioscan -kC processor") do |out|
98-
out.read.scan(/^.*processor/).size
99-
end
97+
IO.popen("/usr/sbin/ioscan -kC processor", &:read).scan(/^.*processor/).size
10098
elsif File.executable?("/usr/sbin/pmcycles")
101-
IO.popen("/usr/sbin/pmcycles -m").read.count("\n")
99+
IO.popen("/usr/sbin/pmcycles -m", &:read).count("\n")
102100
elsif File.executable?("/usr/sbin/lsdev")
103-
IO.popen("/usr/sbin/lsdev -Cc processor -S 1").read.count("\n")
101+
IO.popen("/usr/sbin/lsdev -Cc processor -S 1", &:read).count("\n")
104102
elsif File.executable?("/usr/sbin/sysconf") and os_name =~ /irix/i
105-
IO.popen("/usr/sbin/sysconf NPROC_ONLN").read.to_i
103+
IO.popen("/usr/sbin/sysconf NPROC_ONLN", &:read).to_i
106104
elsif File.executable?("/usr/sbin/sysctl")
107-
IO.popen("/usr/sbin/sysctl -n hw.ncpu").read.to_i
105+
IO.popen("/usr/sbin/sysctl -n hw.ncpu", &:read).to_i
108106
elsif File.executable?("/sbin/sysctl")
109-
IO.popen("/sbin/sysctl -n hw.ncpu").read.to_i
107+
IO.popen("/sbin/sysctl -n hw.ncpu", &:read).to_i
110108
else
111109
1
112110
end
@@ -118,7 +116,7 @@ def compute_processor_count
118116
def compute_physical_processor_count
119117
ppc = case RbConfig::CONFIG["target_os"]
120118
when /darwin1/
121-
IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i
119+
IO.popen("/usr/sbin/sysctl -n hw.physicalcpu", &:read).to_i
122120
when /linux/
123121
cores = {} # unique physical ID / core ID combinations
124122
phy = 0

0 commit comments

Comments
 (0)