[#59462] [ruby-trunk - Bug #9342][Open] [PATCH] SizedQueue#clear does not notify waiting threads in Ruby 1.9.3 — "jsc (Justin Collins)" <redmine@...>

9 messages 2014/01/02

[#59466] [ruby-trunk - Bug #9343][Open] [PATCH] SizedQueue#max= wakes up waiters properly — "normalperson (Eric Wong)" <normalperson@...>

11 messages 2014/01/02

[#59498] [ruby-trunk - Bug #9352][Open] [BUG] rb_sys_fail_str(connect(2) for [fe80::1%lo0]:3000) - errno == 0 — "kain (Claudio Poli)" <claudio@...>

10 messages 2014/01/03

[#59516] [ruby-trunk - Bug #9356][Open] TCPSocket.new does not seem to handle INTR — "charliesome (Charlie Somerville)" <charliesome@...>

48 messages 2014/01/03

[#59538] [ruby-trunk - Feature #9362][Assigned] Minimize cache misshit to gain optimal speed — "shyouhei (Shyouhei Urabe)" <shyouhei@...>

33 messages 2014/01/03
[#59582] Re: [ruby-trunk - Feature #9362][Assigned] Minimize cache misshit to gain optimal speed — SASADA Koichi <ko1@...> 2014/01/06

Intersting challenge.

[#59541] Re: [ruby-trunk - Feature #9362][Assigned] Minimize cache misshit to gain optimal speed — Eric Wong <normalperson@...> 2014/01/04

Hi, I noticed a trivial typo in array.c, and it fails building struct.c

[#59583] [ruby-trunk - Bug #9367][Open] REXML::XmlDecl doesn't use user specified quotes — "bearmini (Takashi Oguma)" <bear.mini@...>

12 messages 2014/01/06

[#59642] [ruby-trunk - Bug #9384][Open] Segfault in ruby 2.1.0p0 — "cbliard (Christophe Bliard)" <christophe.bliard@...>

11 messages 2014/01/08

[#59791] About unmarshallable DRb objects life-time — Rodrigo Rosenfeld Rosas <rr.rosas@...>

A while ago I created a proof-of-concept that I intended to use in my

16 messages 2014/01/15
[#59794] Re: About unmarshallable DRb objects life-time — Eric Hodel <drbrain@...7.net> 2014/01/15

On 15 Jan 2014, at 11:58, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:

[#59808] Re: About unmarshallable DRb objects life-time — Rodrigo Rosenfeld Rosas <rr.rosas@...> 2014/01/16

Em 15-01-2014 19:42, Eric Hodel escreveu:

[#59810] Re: About unmarshallable DRb objects life-time — Eric Hodel <drbrain@...7.net> 2014/01/16

On 16 Jan 2014, at 02:15, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:

[#59826] Re: About unmarshallable DRb objects life-time — Rodrigo Rosenfeld Rosas <rr.rosas@...> 2014/01/17

Em 16-01-2014 19:43, Eric Hodel escreveu:

[#59832] Re: About unmarshallable DRb objects life-time — Eric Hodel <drbrain@...7.net> 2014/01/17

On 17 Jan 2014, at 04:22, Rodrigo Rosenfeld Rosas <rr.rosas@gmail.com> wrote:

[ruby-core:60062] [ruby-trunk - Bug #9447] Bad interaction between Fibers and Trap handlers in Ruby > 2.0.0

From: acid06@...
Date: 2014-01-24 17:57:15 UTC
List: ruby-core #60062
Issue #9447 has been updated by Nilson Santos Figueiredo Junior.


Just a clarification, the issue is that:

  Alarm.alarm(timeout_seconds) do
    # potentially time consuming operation which must have a timeout
  end
  
  # when a timeout occurs, this code will still be in trap context
  # so this will fail:
  logger.info "Log Message"

----------------------------------------
Bug #9447: Bad interaction between Fibers and Trap handlers in Ruby > 2.0.0
https://bugs.ruby-lang.org/issues/9447#change-44572

* Author: Nilson Santos Figueiredo Junior
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.0.0p247
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Hi there,

I've been using and Alarm class I created, which gives Ruby code access to the alarm system call.
It used to work perfectly on 1.9.3 with no issues and more than 1 year of production usage.

Ruby 2.0.0 doesn't let me use it properly, apparently when there's an alarm timeout, the interpreter will think the code is in the trap context forever, so when I try to use Logger afterwards, it will fail (since it uses a Mutex internally).

Below is my Alarm implementation.

    require 'dl'
    require 'dl/import'

    module Alarm
      module SystemCall
        extend DL::Importer

        # imports the POSIX alarm function 
        begin
          dlload 'libc.so.6'
        rescue
          begin
            dlload 'libc.so.5'
          rescue
            dlload 'libc.dylib'
          end
        end
        extern 'unsigned int alarm(unsigned int)'
      end

      def self.alarm(n)
        # creates new fiber which will the code block passed as argument
        fiber = Fiber.new { yield }
        begin
          # new signal handler for the alarm call
          handler = Signal.trap('ALRM') do
            # yields fiber, which makes the control flow continue after
            # after the last resume call for this fiber
            # (in other words, returns from this function)
            Fiber.yield
          end
          # start timing
          SystemCall.alarm(n)
          # start running timed call
          result = fiber.resume
        ensure
          # cancel alarms and restore the previous signal handler
          SystemCall.alarm(0)
          Signal.trap('ALRM', handler)
        end
        return result
      end
    end

Is this sort of thing really no longer supported in Ruby > 2.0.0 or is it a bug? As I've said, it worked perfectly on 1.9.3.
This class is used like this:

    Alarm.alarm(timeout_seconds) do
      # potentially time consuming operation which must have a timeout
    end

Due to other requirements, I can't use the Timeout module, as it creates another thread.
Thanks in advance.



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

In This Thread

Prev Next