Issue #15130 has been updated by duerst (Martin Drst).


I managed to create a very short script that seem so recreate the problem (or at least something similar).

It seems to happen with a `Timeout` inside a `Timeout` (I didn't manage to create a problem with only one `Timeout`).

Here's the script:

````ruby
require 'timeout'

def time_out
  begin
    Timeout.timeout(3) do |_|
      puts 'Before sleeping in method'
      sleep 1
      puts 'After sleeping in method'
    end
  rescue Timeout::Error
    puts 'Timeout triggered in method'
  end
end


begin
  Timeout.timeout(5) do |_|
    puts 'Before sleeping'
    sleep 1
    puts 'After sleeping, before method call'
    time_out
    puts 'After method call'
  end
rescue Timeout::Error
  puts 'Timeout triggered'
end
````

When I run this, I get all the expected output, as follows:
```
Before sleeping
After sleeping, before method call
Before sleeping in method
After sleeping in method
```
but this script, rather than stopping after that (2 seconds overall), just hangs (for minutes), until I use Ctrl-C.

At that point, it prints out
```
Traceback (most recent call last):
../timeout_test.rb: execution expired (Timeout::Error)
```



----------------------------------------
Bug #15130: open-uri hangs on cygwin
https://bugs.ruby-lang.org/issues/15130#change-74187

* Author: duerst (Martin Drst)
* Status: Open
* Priority: Normal
* Assignee: normalperson (Eric Wong)
* Target version: 
* ruby -v: ruby 2.6.0dev (2018-09-16 trunk 64761) [x86_64-cygwin]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
After using `make; make runnable`, the following one-liner hangs:

```
 ./ruby -ropen-uri -e 'open "http://web.mit.edu/index.html"'
```

This happens on any http URI, but not for local files. The above URI is just an example. I would have chosen ruby-lang.org if it was still using http, but I didn't want to complicate this with https.

The `open` work for local files. I discovered this when trying to use `make up`, where the downloading of Unicode data files just hung.

Here's the trace I get after hitting Ctrl-C:

Traceback (most recent call last):
        15: from -e:1:in `<main>'
        14: from /cygdrive/c/Data/ruby_test_copy/lib/open-uri.rb:35:in `open'
        13: from /cygdrive/c/Data/ruby_test_copy/lib/open-uri.rb:736:in `open'
        12: from /cygdrive/c/Data/ruby_test_copy/lib/open-uri.rb:165:in `open_uri'
        11: from /cygdrive/c/Data/ruby_test_copy/lib/open-uri.rb:224:in `open_loop'
        10: from /cygdrive/c/Data/ruby_test_copy/lib/open-uri.rb:224:in `catch'
         9: from /cygdrive/c/Data/ruby_test_copy/lib/open-uri.rb:226:in `block in open_loop'
         8: from /cygdrive/c/Data/ruby_test_copy/lib/open-uri.rb:758:in `buffer_open'
         7: from /cygdrive/c/Data/ruby_test_copy/lib/open-uri.rb:337:in `open_http'
         6: from /cygdrive/c/Data/ruby_test_copy/lib/net/http.rb:924:in `start'
         5: from /cygdrive/c/Data/ruby_test_copy/lib/net/http.rb:935:in `do_start'
         4: from /cygdrive/c/Data/ruby_test_copy/lib/net/http.rb:950:in `connect'
         3: from /cygdrive/c/Data/ruby_test_copy/lib/timeout.rb:103:in `timeout'
         2: from /cygdrive/c/Data/ruby_test_copy/lib/timeout.rb:97:in `block in timeout'
         1: from /cygdrive/c/Data/ruby_test_copy/lib/timeout.rb:97:in `ensure in block in timeout'
/cygdrive/c/Data/ruby_test_copy/lib/timeout.rb:97:in `join': Interrupt

My plan is to (manually) bisect this to find the offending commit. One suspicion I have is that the problem is related to timeouts, but this is not confirmed at all. Any help is appreciated.

---Files--------------------------------
0001-thread_pthread.c-fall-back-to-UBF_TIMER_PTHREAD-for-.patch (1.29 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>