[ruby-cvs:59302] kosaki:r52151 (trunk): * ruby.c (open_load_file): reset O_NONBLOCK after open.

kosaki at ruby-lang.org kosaki at ruby-lang.org
Sun Oct 18 06:09:12 JST 2015


kosaki	2015-10-18 06:09:10 +0900 (Sun, 18 Oct 2015)

  New Revision: 52151

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=52151

  Log:
    * ruby.c (open_load_file): reset O_NONBLOCK after open.
      Even if S_ISREG() is true, the file may be file on FUSE filesystem
      or something. We can't assume O_NONBLOCK is safe.
      Moreover, we should wait if the path is point to FIFO. That's
      FIFO semantics. GVL should be transparent from ruby script.
      Thus, just reopen without O_NONBLOCK for filling the requirements.
      [Bug #11060][Bug #11559]
    * ruby.c (loadopen_func): new for the above.
    * file.c (ruby_is_fd_loadable): new. for checks loadable file type
      of not.
    * file.c (rb_file_load_ok): use ruby_is_fd_loadble()
    * internal.h: add ruby_is_fd_loadble()
    * common.mk: now, ruby.o depend on thread.h.
    * test/ruby/test_require.rb
    (TestRequire#test_loading_fifo_threading_success): new test.
      This test successful case that loading from FIFO.
    * test/ruby/test_require.rb
    (TestRequire#test_loading_fifo_threading_raise): rename from
      test_loading_fifo_threading. You souldn't rescue an exception
      if you test raise or not.
      Moreover, this case should be caught IOError because load(FIFO)
      should be blocked until given any input.

  Modified files:
    trunk/ChangeLog
    trunk/common.mk
    trunk/file.c
    trunk/internal.h
    trunk/ruby.c
    trunk/test/ruby/test_require.rb


More information about the ruby-cvs mailing list