[#46930] [ruby-trunk - Bug #6825][Open] forking and pthread_cond_timedwait: Invalid argument (EINVAL) on OS X / 1.9.3-p194 — "xentronium (Mark A)" <markizko@...>

29 messages 2012/08/02

[#46974] [ruby-trunk - Bug #6830][Assigned] test failure test_constants(OpenSSL::TestConfig) [/ruby/test/openssl/test_config.rb:27] on Mac + homebrew — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

17 messages 2012/08/04

[#46975] [ruby-trunk - Bug #6831][Assigned] test_getpwuid() on Mountain Lion — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

12 messages 2012/08/04

[#46996] [ruby-trunk - Bug #6836][Assigned] Improve File.expand_path performance in Windows — "luislavena (Luis Lavena)" <luislavena@...>

15 messages 2012/08/04

[#47036] [ruby-trunk - Feature #6841][Open] Shorthand for Assigning Return Value of Method to Self — "wardrop (Tom Wardrop)" <tom@...>

18 messages 2012/08/07

[#47108] [ruby-trunk - Feature #6852][Open] [].transpose should behave specially — "boris_stitnicky (Boris Stitnicky)" <boris@...>

13 messages 2012/08/10

[#47138] [ruby-trunk - Bug #6861][Open] ERB::Util.escape_html is not escaping single quotes — "spastorino (Santiago Pastorino)" <santiago@...>

14 messages 2012/08/12

[#47163] [ruby-trunk - Bug #6865][Open] GC::Profiler.report might create a huge String and invoke a few GC cycles — "Eregon (Benoit Daloze)" <redmine@...>

9 messages 2012/08/13

[#47189] [ruby-trunk - Feature #6868][Open] Make `do` in block syntax optional when the block is the last argument of a method and is not an optional argument — "alexeymuranov (Alexey Muranov)" <redmine@...>

8 messages 2012/08/14

[#47243] [ruby-trunk - Feature #6895][Open] TracePoint API — "ko1 (Koichi Sasada)" <redmine@...>

27 messages 2012/08/20

[#47267] [ruby-trunk - Bug #6903][Open] [[Ruby 1.9:]] --enable-load-relative broken on systems with /lib64 — "mpapis (Michal Papis)" <mpapis@...>

11 messages 2012/08/22

[#47309] [ruby-trunk - Bug #6929][Open] Documentation for Ripper — "zzak (Zachary Scott)" <zachary@...>

16 messages 2012/08/25

[#47345] [ruby-trunk - Feature #6946][Open] FIPS support? — "vo.x (Vit Ondruch)" <v.ondruch@...>

35 messages 2012/08/28

[ruby-core:47220] [ruby-trunk - Feature #4347][Assigned] Tracing cannot be re-enabled after callcc [patch]

From: "ko1 (Koichi Sasada)" <redmine@...>
Date: 2012-08-16 02:34:25 UTC
List: ruby-core #47220
Issue #4347 has been updated by ko1 (Koichi Sasada).

Status changed from Closed to Assigned
Assignee changed from mame (Yusuke Endoh) to ko1 (Koichi Sasada)

I reopen this ticket.  As you say, this is only workaround.

I solve this problem with restoring 'tracing state' (running trace func or not) at Continuation#call.  I believe it is not a work around, but essential solution.  I revert your proposal and set_trace_func(nil) does not clear tracing state any more.

With this change, your test code go to infinite loop:

# example code
require 'continuation'
 
cont = nil
 
func = lambda{|*args|
  p [1, args]
  cont.call(nil)
}
 
3.times{
  cont = callcc{|c| c}
  # -> (1) call trace func (c-return), (2) call cont.call(nil) and come here!

  p cont
   
  if cont
    set_trace_func(func)
  else
    set_trace_func(nil)
  end
}


With my patch, this example work fine:

require 'continuation'
 
cont = nil
func = lambda{|*args|
  p [1, args]
  cont, c = nil, cont
  c.call(nil) if c
}

3.times{|i|
  p i
  cont = callcc{|c| c}
  p cont

  if cont
    set_trace_func(func)
  end
}


I quote mame-san's comment, again.

> But note that there is still other issues, and that this issue may have a relapse in future. If you want not to hit a land mine, do not use callcc seriously. It is very fun, joke feature, I think.

----------------------------------------
Feature #4347: Tracing cannot be re-enabled after callcc [patch]
https://bugs.ruby-lang.org/issues/4347#change-28902

Author: quix (James M. Lawrence)
Status: Assigned
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: 2.0.0


=begin
 % patch -p1 < test_continuation_tracing.patch 
 patching file test/ruby/test_continuation.rb
 % ./ruby -v test/ruby/test_continuation.rb 
 ruby 1.9.3dev (2011-01-30 trunk 30735) [i386-darwin9.8.0]
 Run options: 
 
 # Running tests:
 
 ......FF
 
 Finished tests in 0.080788s, 99.0246 tests/s, 148.5369 assertions/s.
 
   1) Failure:
 test_tracing_with_set_trace_func(TestContinuation) [test/ruby/test_continuation.rb:99]:
 <3> expected but was
 <1>.
 
   2) Failure:
 test_tracing_with_thread_set_trace_func(TestContinuation) [test/ruby/test_continuation.rb:121]:
 <3> expected but was
 <0>.
 
 In thread.c (thread_suppress_tracing) the code after (*func)(arg, running)
 is not executed, causing th->tracing to not be cleared.
 
 This two-line patch works, though it may only address a symptom.
=end



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

In This Thread

Prev Next