[MacRuby-devel] macruby GCD bug?
Watson
watson1978 at gmail.com
Fri Jan 13 06:12:47 PST 2012
Hi,
it looks like the variable's scope issue.
I don't know detail why this crash happen yet.
for workaround, you could use variable $array or @array instead of array.
Thanks,
2012/1/13 Alan Skipp <al_skipp at fastmail.fm>:
> I've been continuing with my efforts to implement Fibers using GCD and in the process I think I may have uncovered a Macruby bug - though perhaps it's a bug in my code? Is there anything fundamentally wrong with the code posted below? It consistently results in a EXC_BAD_ACCESS error.
>
> Cheers,
> Al
>
> class Fiber
> def initialize &block
> @block = block
>
> @yield_sem = Dispatch::Semaphore.new(0)
> @resume_sem = Dispatch::Semaphore.new(0)
>
> @fiber_queue = Dispatch::Queue.new "fiber"
> @fiber_queue.async {@yield_sem.wait} # immediately suspend @fiber_queue
>
> # the following block will only run after '@yield_sem' is signalled – which happens when 'resume' is called
> @fiber_queue.async do
> @block.call
> @resume_sem.signal # the block has finished - let the caller resume
> end
> end
>
> def resume
> @yield_sem.signal
> @resume_sem.wait # causes the GCD queue of the caller to suspend
> end
> end
>
> array = [1,2,3]
> fiber = Fiber.new { array << 4 } # crash when fiber is resumed
> fiber.resume
> p array # we don't get this far
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
More information about the MacRuby-devel
mailing list