[#53072] [ruby-trunk - Feature #7994][Open] Make iterators pass an implicit named parameter `iteration` to the executed block — "alexeymuranov (Alexey Muranov)" <redmine@...>

10 messages 2013/03/01

[#53097] [ruby-trunk - Bug #8000][Open] "require 'tk'" segfaults on 64-bit linux with Tk 8.6 — "edmccard (Ed McCardell)" <edmccard@...>

25 messages 2013/03/02

[#53137] [ruby-trunk - Bug #8017][Open] Got segmentation fault on attempt to install ruby 2.0.0-p0 on Mac 10.6.8 via RVM — "adantel (Alex Filatau)" <filatau@...>

9 messages 2013/03/05

[#53168] [ruby-trunk - Bug #8034][Open] File.expand_path('something', '~') do not include home path — "rap-kasta (Pavel Manylov)" <rapkasta@...>

12 messages 2013/03/06

[#53199] [ruby-trunk - Bug #8040][Open] Unexpect behavior when using keyword arguments — "pabloh (Pablo Herrero)" <pablodherrero@...>

11 messages 2013/03/07

[#53203] [ruby-trunk - Feature #8042][Open] Add Addrinfo#socket to create a socket that is not connected or bound — "drbrain (Eric Hodel)" <drbrain@...7.net>

12 messages 2013/03/07

[#53248] Github commit log should not be used as references on redmine — Marc-Andre Lafortune <ruby-core-mailing-list@...>

Github commit log should not be used as references on redmine. E.g:

10 messages 2013/03/09

[#53386] [CommonRuby - Feature #8088][Open] Method#parameters (and friends) should provide useful information about core methods — "headius (Charles Nutter)" <headius@...>

14 messages 2013/03/13

[#53412] [CommonRuby - Feature #8096][Open] introduce Time.current_timestamp — "vipulnsward (Vipul Amler)" <vipulnsward@...>

34 messages 2013/03/14

[#53439] [ruby-trunk - Bug #8100][Open] Segfault in ruby-2.0.0p0 — "judofyr (Magnus Holm)" <judofyr@...>

22 messages 2013/03/15

[#53478] [ruby-trunk - Feature #8107][Open] [patch] runtime flag to track object allocation metadata — "tmm1 (Aman Gupta)" <ruby@...1.net>

20 messages 2013/03/16

[#53498] [ruby-trunk - Feature #8110][Open] Regex methods not changing global variables — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>

21 messages 2013/03/18

[#53502] [ruby-trunk - Bug #8115][Open] make install DESTDIR=/my/install/path fails — "vo.x (Vit Ondruch)" <v.ondruch@...>

11 messages 2013/03/18

[#53688] [ruby-trunk - Feature #8158][Open] lightweight structure for loaded features index — "funny_falcon (Yura Sokolov)" <funny.falcon@...>

27 messages 2013/03/24

[#53692] [ruby-trunk - Bug #8159][Open] Build failure introduced by Rinda changes — "luislavena (Luis Lavena)" <luislavena@...>

22 messages 2013/03/24

[#53733] [ruby-trunk - Bug #8165][Open] Problems with require — "Krugloff (Alexandr Kruglov)" <mr.krugloff@...>

12 messages 2013/03/26

[#53742] [ruby-trunk - Bug #8168][Open] Feature request: support for (single) statement lambda syntax/definition — "garysweaver (Gary Weaver)" <garysweaver@...>

9 messages 2013/03/26

[#53765] [ruby-trunk - Bug #8174][Open] AIX header file conflict with rb_hook_list_struct — "edelsohn (David Edelsohn)" <dje.gcc@...>

11 messages 2013/03/27

[#53808] [ruby-trunk - Feature #8181][Open] New flag for strftime that supports adding ordinal suffixes to numbers — "tkellen (Tyler Kellen)" <tyler@...>

10 messages 2013/03/28

[#53811] [ruby-trunk - Bug #8182][Open] XMLRPC request fails with "Wrong size. Was 31564, should be 1501" — "tsagadar (Marcel Mueller)" <marcel.mueller@...>

28 messages 2013/03/28

[#53849] [ruby-trunk - Feature #8191][Open] Short-hand syntax for duck-typing — "wardrop (Tom Wardrop)" <tom@...>

48 messages 2013/03/31

[#53850] An evaluation of 2.0.0 release — Yusuke Endoh <mame@...>

Let's look back at 2.0.0 release so that we can do better next time.

12 messages 2013/03/31

[ruby-core:53662] [ruby-trunk - Bug #8125] lost-tuple bug and fix for Rinda::TupleSpaceProxy.take

From: "drbrain (Eric Hodel)" <drbrain@...7.net>
Date: 2013-03-23 07:37:09 UTC
List: ruby-core #53662
Issue #8125 has been updated by drbrain (Eric Hodel).

File rinda.rb.8215.3.patch added

Oops, I forgot to run all the tests, this fixes the remaining tests by restoring an accidentally deleted line.
----------------------------------------
Bug #8125: lost-tuple bug and fix for Rinda::TupleSpaceProxy.take
https://bugs.ruby-lang.org/issues/8125#change-37842

Author: vjoel (Joel VanderWerf)
Status: Assigned
Priority: Normal
Assignee: seki (Masatoshi Seki)
Category: lib
Target version: 
ruby -v: ruby 2.0.0p0 (2013-02-24) [x86_64-linux]


=begin

Rinda::TupleSpaceProxy prevents tuple loss during #take by exposing a "port" object on the client that the remote side (the tuplespace server) pushes to, instead of relying on the method return value. Pushing to the port fails if the process that called #take has exited, so the tuple will not be deleted from the tuplespace server.

However, if the process has not exited, and the thread that called #take was interrupted, the port still exists and accepts push requests (in the main drb thread). In this case the tuple is deleted on the server and not available on the client.

This is frequently a problem when using irb and manually interrupting take calls. It would also be a problem when using timeouts.

A concise reproduction of the problem is in the attached thread-int.rb.

The bug can be fixed by the patch below, which replaces the port array with a custom object that rejects pushes if the call stack has been unwound.

Note that this patch combines naturally with the faster take patch in #8119.


  diff --git a/lib/rinda/rinda.rb b/lib/rinda/rinda.rb
  index 18e284a..057c61a 100644
  --- a/lib/rinda/rinda.rb
  +++ b/lib/rinda/rinda.rb
  @@ -206,6 +206,23 @@ module Rinda
     # TupleSpaceProxy allows a remote Tuplespace to appear as local.

     class TupleSpaceProxy
  +    class Port
  +      attr_reader :val
  +
  +      def initialize
  +        @open = true
  +      end
  +      
  +      def close
  +        @open = false
  +      end
  +
  +      def push val
  +        raise unless @open
  +        @val = val
  +        nil # so that val doesn't get marshalled again
  +      end
  +    end

       ##
       # Creates a new TupleSpaceProxy to wrap +ts+.
  @@ -222,6 +239,19 @@ module Rinda
       end

       ##
  +    # Safely takes +tuple+ from the proxied TupleSpace.  See TupleSpace#take.
  +    # Ensures that an interrupted thread will not become a lasting cause
  +    # of further data loss.
  +
  +    def take_safely(tuple, sec=nil, &block)
  +      port = Port.new
  +      @ts.move(DRbObject.new(port), tuple, sec, &block)
  +      port.val
  +    ensure
  +      port.close # don't let the DRb thread push to it when remote sends tuple
  +    end
  +
  +    ##
       # Takes +tuple+ from the proxied TupleSpace.  See TupleSpace#take.

       def take(tuple, sec=nil, &block)

=end



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

In This Thread