[MacRuby-devel] macruby GCD bug?
Alan Skipp
al_skipp at fastmail.fm
Fri Jan 13 06:21:01 PST 2012
Thanks for the quick response. I'll use your suggested workaround for now.
All the best,
Al
On 13 Jan 2012, at 14:12, Watson wrote:
> 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
> _______________________________________________
> 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