[#27380] [Bug #2553] Fix pthreads slowness by eliminating unnecessary sigprocmask calls — Dan Peterson <redmine@...>

Bug #2553: Fix pthreads slowness by eliminating unnecessary sigprocmask calls

21 messages 2010/01/03

[#27437] [Feature #2561] 1.8.7 Patch reduces time cost of Rational operations by 50%. — Kurt Stephens <redmine@...>

Feature #2561: 1.8.7 Patch reduces time cost of Rational operations by 50%.

9 messages 2010/01/06

[#27447] [Bug #2564] [patch] re-initialize timer_thread_{lock,cond} after fork — Aliaksey Kandratsenka <redmine@...>

Bug #2564: [patch] re-initialize timer_thread_{lock,cond} after fork

18 messages 2010/01/06

[#27545] [Feature #2594] 1.8.7 Patch: Reduce time spent in gc.c is_pointer_to_heap(). — Kurt Stephens <redmine@...>

Feature #2594: 1.8.7 Patch: Reduce time spent in gc.c is_pointer_to_heap().

8 messages 2010/01/11

[#27635] [Bug #2619] Proposed method: Process.fork_supported? — Hongli Lai <redmine@...>

Bug #2619: Proposed method: Process.fork_supported?

45 messages 2010/01/20
[#27643] [Feature #2619] Proposed method: Process.fork_supported? — Luis Lavena <redmine@...> 2010/01/21

Issue #2619 has been updated by Luis Lavena.

[#27678] Re: [Feature #2619] Proposed method: Process.fork_supported? — Yukihiro Matsumoto <matz@...> 2010/01/22

Hi,

[#27684] Re: [Feature #2619] Proposed method: Process.fork_supported? — Charles Oliver Nutter <headius@...> 2010/01/22

On Thu, Jan 21, 2010 at 11:27 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

[#27708] Re: [Feature #2619] Proposed method: Process.fork_supported? — Yukihiro Matsumoto <matz@...> 2010/01/22

Hi,

[#27646] Re: [Bug #2619] Proposed method: Process.fork_supported? — Tanaka Akira <akr@...> 2010/01/21

2010/1/21 Hongli Lai <redmine@ruby-lang.org>:

[#27652] Re: [Bug #2619] Proposed method: Process.fork_supported? — Hongli Lai <hongli@...99.net> 2010/01/21

On 1/21/10 5:20 AM, Tanaka Akira wrote:

[#27653] Re: [Bug #2619] Proposed method: Process.fork_supported? — Tanaka Akira <akr@...> 2010/01/21

2010/1/21 Hongli Lai <hongli@plan99.net>:

[#27662] Re: [Bug #2619] Proposed method: Process.fork_supported? — Vladimir Sizikov <vsizikov@...> 2010/01/21

On Thu, Jan 21, 2010 at 10:53 AM, Tanaka Akira <akr@fsij.org> wrote:

[#27698] [Bug #2629] ConditionVariable#wait(mutex, timeout) should return whether the condition was signalled, not the waited time — Hongli Lai <redmine@...>

Bug #2629: ConditionVariable#wait(mutex, timeout) should return whether the condition was signalled, not the waited time

8 messages 2010/01/22

[#27722] [Feature #2635] Unbundle rdoc — Yui NARUSE <redmine@...>

Feature #2635: Unbundle rdoc

14 messages 2010/01/23

[#27757] [Bug #2638] ruby-1.9.1-p37[68] build on aix5.3 with gcc-4.2 failed to run for me because it ignores where libgcc is located. — Joel Soete <redmine@...>

Bug #2638: ruby-1.9.1-p37[68] build on aix5.3 with gcc-4.2 failed to run for me because it ignores where libgcc is located.

10 messages 2010/01/24

[#27778] [Bug #2641] Seg fault running miniruby during ruby build on Haiku — Alexander von Gluck <redmine@...>

Bug #2641: Seg fault running miniruby during ruby build on Haiku

10 messages 2010/01/25

[#27791] [Bug #2644] memory over-allocation with regexp — Greg Hazel <redmine@...>

Bug #2644: memory over-allocation with regexp

12 messages 2010/01/25

[#27794] [Bug #2647] Lack of testing for String#split — Hugh Sasse <redmine@...>

Bug #2647: Lack of testing for String#split

14 messages 2010/01/25

[#27912] [Bug #2669] mkmf find_executable doesn't find .bat files — Roger Pack <redmine@...>

Bug #2669: mkmf find_executable doesn't find .bat files

11 messages 2010/01/27

[#27930] [Bug:trunk] some behavior changes of lib/csv.rb between 1.8 and 1.9 — Yusuke ENDOH <mame@...>

Hi jeg2, or anyone who knows the implementation of FasterCSV,

15 messages 2010/01/28
[#27931] Re: [Bug:trunk] some behavior changes of lib/csv.rb between 1.8 and 1.9 — James Edward Gray II <james@...> 2010/01/28

On Jan 28, 2010, at 10:51 AM, Yusuke ENDOH wrote:

[ruby-core:27388] [Bug #2554] Net::FTP should not use MSG_OOB

From: Hongli Lai <redmine@...>
Date: 2010-01-04 10:57:23 UTC
List: ruby-core #27388
Bug #2554: Net::FTP should not use MSG_OOB
http://redmine.ruby-lang.org/issues/show/2554

Author: Hongli Lai
Status: Open, Priority: Normal
ruby -v: ruby 1.8.7 (2009-12-24 patchlevel 248) [x86_64-linux]

Net::FTP#abort, #status etc currently send commands with MSG_OOB. This causes a freeze when running RubySpec on x86_64 Linux (Ubuntu 9.10):

  hongli@ubuntu:~/rubyspec$ ./mspec/bin/mspec library/net/ftp/abort_spec.rb -e "Net::FTP#abort sends the ABOR command to the server"
  (watch it freeze)

This particular test sets up a dummy FTP server, connects to it with Net::FTP, and then calls Net::FTP#abort. Net::FTP#abort freezes while waiting for the FTP server response.

The dummy FTP server has a very simple and naive implementation. Its command handling main loop looks like this:

  loop do
    command = @socket.recv(1024)
    if command is a QUIT command
      break
    else
      handle_command(command)
    end
  end

The problem is that MSG_OOB only sends the last byte of the data as urgent data; the rest is sent as regular data. From http://popcnt.org/2007/07/what-happened-to-tcp-flag-urgent-msgoob.html:

  Usually when socket receives tcp packet with URG flag it treats it as normal tcp data. recv() is going to read urgent data as it was normal tcp stream. The only difference is that the last byte of data is discarded. The last byte in urgent data was always a problem due to incoherent rfc.

Net::FTP#abort calls @sock.send("ABOR\r\n", Socket::MSG_OOB). This causes the server to receive "ABOR\r" (notice the lack of "\n"); the "\r" is discard from the normal TCP stream, and can only be read if the server reads the socket with MSG_OOB. However, after having read "ABOR\r", select() on x86_64 Linux still indicates that the socket is readable. This causes the server to call recv() without MSG_OOB on the socket again, and this recv() freezes because it cannot read the urgent data.

The FTP protocol description does not seem to make any mention that the ABOR command should be sent with MSG_OOB. This makes be believe that Net::FTP is bugged, not the server.

This freeze seems to be operating system specific and configure flag specific:
- The freeze occurs on Ruby 1.8.7-p248 on x86_64 Linux, when compiled from source with no extra configure flags.
- The freeze does not occur on the default Ruby as packaged by x86_64 Ubuntu 9.10. This is Ruby 1.8.7-p174, and I believe configured with --enable-pthreads --enable-shared.
- The freeze does not occur on OS X Snow Leopard.


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next