Skip to content

Commit 0500aef

Browse files
committed
Read errno only once where possible
(cherry picked from commit e54e3af)
1 parent f678b10 commit 0500aef

File tree

5 files changed

+36
-28
lines changed

5 files changed

+36
-28
lines changed

src/main/ruby/truffleruby/core/errno.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ def self.handle(additional = nil)
4848
raise SystemCallError.new(additional, err)
4949
end
5050

51+
def self.handle_errno(errno)
52+
return if errno == 0
53+
54+
raise SystemCallError.new(nil, errno)
55+
end
56+
5157
def self.errno
5258
Truffle::POSIX.errno_address.read_int
5359
end

src/main/ruby/truffleruby/core/io.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2306,7 +2306,7 @@ def sysread(number_of_bytes, buffer=undefined)
23062306
raise IOError unless @ibuffer.empty?
23072307

23082308
str, errno = Truffle::POSIX.read_string(self, number_of_bytes)
2309-
Errno.handle unless errno == 0
2309+
Errno.handle_errno(errno) unless errno == 0
23102310

23112311
raise EOFError if Primitive.nil? str
23122312

src/main/ruby/truffleruby/core/posix.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ def self.read_string_at_least_one_byte(io, count)
353353
if TRY_AGAIN_ERRNOS.include? errno
354354
IO.select([io])
355355
else
356-
Errno.handle
356+
Errno.handle_errno(errno)
357357
end
358358
end
359359
end
@@ -368,7 +368,7 @@ def self.read_string_nonblock(io, count)
368368
elsif TRY_AGAIN_ERRNOS.include? errno
369369
raise IO::EAGAINWaitReadable
370370
else
371-
Errno.handle
371+
Errno.handle_errno(errno)
372372
end
373373
end
374374

@@ -432,7 +432,7 @@ def self.write_string_native(io, string, continue_on_eagain)
432432
return written
433433
end
434434
else
435-
Errno.handle
435+
Errno.handle_errno(errno)
436436
end
437437
end
438438
written += ret
@@ -474,7 +474,7 @@ def self.write_string_nonblock_native(io, string)
474474
if TRY_AGAIN_ERRNOS.include? errno
475475
raise IO::EAGAINWaitWritable
476476
else
477-
Errno.handle
477+
Errno.handle_errno(errno)
478478
end
479479
end
480480
written

src/main/ruby/truffleruby/core/process.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,14 @@ def self.clock_getres(id, unit=:float_second)
122122
raise Errno::EINVAL
123123
else
124124
res_for_id = Truffle::POSIX.truffleposix_clock_getres(id)
125-
if res_for_id == 0 then
125+
if res_for_id == 0
126126
Errno.handle
127127
else
128128
res_for_id
129129
end
130130
end
131131

132-
if :hertz == unit then
132+
if :hertz == unit
133133
1.0 / nanoseconds_to_unit(res,:float_second)
134134
else
135135
nanoseconds_to_unit(res,unit)

src/main/ruby/truffleruby/core/truffle/io_operations.rb

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -152,27 +152,29 @@ def self.select(readables, readable_ios, writables, writable_ios, errorables, er
152152
remaining_timeout)
153153
end
154154

155-
result = if primitive_result < 0
156-
if Errno.errno == Errno::EINTR::Errno
157-
if timeout
158-
# Update timeout
159-
now = Process.clock_gettime(Process::CLOCK_MONOTONIC, :microsecond)
160-
waited = now - start
161-
if waited >= timeout
162-
nil # timeout
163-
else
164-
remaining_timeout = timeout - waited
165-
:retry
166-
end
167-
else
168-
:retry
169-
end
170-
else
171-
Errno.handle
172-
end
173-
else
174-
primitive_result
175-
end
155+
result =
156+
if primitive_result < 0
157+
errno = Errno.errno
158+
if errno == Errno::EINTR::Errno
159+
if timeout
160+
# Update timeout
161+
now = Process.clock_gettime(Process::CLOCK_MONOTONIC, :microsecond)
162+
waited = now - start
163+
if waited >= timeout
164+
nil # timeout
165+
else
166+
remaining_timeout = timeout - waited
167+
:retry
168+
end
169+
else
170+
:retry
171+
end
172+
else
173+
Errno.handle_errno(errno)
174+
end
175+
else
176+
primitive_result
177+
end
176178
end while result == :retry
177179

178180
if result == 0

0 commit comments

Comments
 (0)