mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
IO#advise should not raise Errno::ENOSYS
As it is just a hint the kernel is free to ignore, IO#advise already succeeds when posix_fadvise is not available build time at all. Following that, if posix_fadvise was available at build time but not implemented in the running kernel, we should also ignore it. * io.c (do_io_advise): do not raise on ENOSYS * test/ruby/test_io.rb (test_advise): do not skip on Errno::ENOSYS (test_advise_pipe): ditto [ruby-core:72066] [Feature #11806] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3ee57230b3
commit
fae144419c
3 changed files with 10 additions and 5 deletions
|
@ -1,3 +1,10 @@
|
|||
Sat Dec 12 07:44:38 2015 Eric Wong <e@80x24.org>
|
||||
|
||||
* io.c (do_io_advise): do not raise on ENOSYS
|
||||
* test/ruby/test_io.rb (test_advise): do not skip on Errno::ENOSYS
|
||||
(test_advise_pipe): ditto
|
||||
[ruby-core:72066] [Feature #11806]
|
||||
|
||||
Sat Dec 12 07:05:29 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* enc/windows_1252.c: separate from ISO-8859-1 to fix 0x80..0x9e
|
||||
|
|
2
io.c
2
io.c
|
@ -8586,7 +8586,7 @@ do_io_advise(rb_io_t *fptr, VALUE advice, off_t offset, off_t len)
|
|||
ias.len = len;
|
||||
|
||||
rv = (int)rb_thread_io_blocking_region(io_advise_internal, &ias, fptr->fd);
|
||||
if (rv) {
|
||||
if (rv && rv != ENOSYS) {
|
||||
/* posix_fadvise(2) doesn't set errno. On success it returns 0; otherwise
|
||||
it returns the error code. */
|
||||
VALUE message = rb_sprintf("%"PRIsVALUE" "
|
||||
|
|
|
@ -2565,8 +2565,6 @@ End
|
|||
ret = assert_nothing_raised(lambda { os_and_fs(tf.path) }) {
|
||||
begin
|
||||
t.advise(adv, offset, len)
|
||||
rescue Errno::ENOSYS
|
||||
skip
|
||||
rescue Errno::EINVAL => e
|
||||
if /linux/ =~ RUBY_PLATFORM && (Etc.uname[:release].split('.').map(&:to_i) <=> [3,6]) < 0
|
||||
next # [ruby-core:65355] tmpfs is not supported
|
||||
|
@ -3007,8 +3005,8 @@ End
|
|||
# we don't know if other platforms have a real posix_fadvise()
|
||||
with_pipe do |r,w|
|
||||
# Linux 2.6.15 and earlier returned EINVAL instead of ESPIPE
|
||||
assert_raise(Errno::ESPIPE, Errno::EINVAL, Errno::ENOSYS) { r.advise(:willneed) }
|
||||
assert_raise(Errno::ESPIPE, Errno::EINVAL, Errno::ENOSYS) { w.advise(:willneed) }
|
||||
assert_raise(Errno::ESPIPE, Errno::EINVAL) { r.advise(:willneed) }
|
||||
assert_raise(Errno::ESPIPE, Errno::EINVAL) { w.advise(:willneed) }
|
||||
end
|
||||
end if /linux/ =~ RUBY_PLATFORM
|
||||
|
||||
|
|
Loading…
Reference in a new issue