[MacRuby-devel] Frameworks Help
Laurent Sansonetti
lsansonetti at apple.com
Sun Oct 31 14:39:35 PDT 2010
Hi Shaun,
It's hard to really make a diagnosis because I don't know much about the C code you're interfacing with MacRuby, but the auto_zone_thread_registration_error() error is raised because a posix thread has been started but has not been registered with the GC, and then called MacRuby.
If the C code you're calling uses NSThreads, this error should not be raised since NSThreads are aware of the GC, but if it creates threads using the pthread_create() posix API, then you will have to register the threads by yourself. You can use the objc_registerThreadWithCollector() API inside the pthread body, before doing any other operations.
As your C code is multithreaded, you might want to look carefully if all your code base is thread-safe, and using NSLocks or GCD to isolate certain code paths.
Laurent
On Oct 29, 2010, at 10:41 PM, Shaun August wrote:
> Hi All,
>
> I have had some limited success going back and forth between the c framework, objective-c wrapper and MacRuby.
>
> I am getting numerous malloc errors when I start up the application. The application sort of runs after the first malloc error but after the second error it crashes almost immediately.
>
>
> 2010-10-29 21:31:06.323 YYY[3585:a0f] awaking the Phidgets
> YYY(3585,0x10374d000) malloc: *** auto malloc[3585]: error: GC operation on unregistered thread. Thread registered implicitly. Break on auto_zone_thread_registration_error() to debug.
>
> 2010-10-29 21:31:06.469 YYY[3585:5003] phidget Added
> 2010-10-29 21:31:06.563 YYY[3585:a0f] Phidget Added!
> 2010-10-29 21:31:06.563 YYY[3585:a0f] input changed
> 2010-10-29 21:31:06.564 YYY[3585:a0f] input changed
> 2010-10-29 21:31:06.564 YYY[3585:a0f] input changed
> 2010-10-29 21:31:06.565 YYY[3585:a0f] input changed
> 2010-10-29 21:31:06.567 YYY[3585:a0f] input changed
> 2010-10-29 21:31:06.568 YYY[3585:a0f] input changed
> 2010-10-29 21:31:06.568 YYY[3585:a0f] input changed
> 2010-10-29 21:31:06.568 YYY[3585:a0f] input changed
> YYY(3585,0x115944000) malloc: *** auto malloc[3585]: error: GC operation on unregistered thread. Thread registered implicitly. Break on auto_zone_thread_registration_error() to debug.
>
> 2010-10-29 21:31:16.595 YYY[3585:a0f] -[NSRegion InputChange:]: unrecognized selector sent to instance 0x200609f60
> 2010-10-29 21:31:16.596 YYY[3585:a0f] -[NSRegion InputChange:]: unrecognized selector sent to instance 0x200609f60
> 2010-10-29 21:31:16.914 YYY[3585:a0f] -[NSRegion InputChange:]: unrecognized selector sent to instance 0x200609f60
> 2010-10-29 21:31:16.915 YYY[3585:a0f] -[NSRegion InputChange:]: unrecognized selector sent to instance 0x200609f60
>
>
> I have read the malloc errors come from problems with the threading in the c libraries but I am not sure if there is anything I can do to fix this. Am I stuck with this error or is there a way around it?
>
> Thanks,
>
> Shaun
>
>
>
>
> On 2010-10-24, at 12:17 AM, Mario Steele wrote:
>
>> Hey Shaun,
>>
>> On Sun, Oct 24, 2010 at 1:14 AM, Shaun August <shaun at eoslightmedia.com> wrote:
>> Hi Again,
>>
>> I have spent some time with Nick's tutorial and I am looking into wrapping the framework I have been provided with and I have a few more questions.
>>
>> The framework I am working with is already compiled and not in an xcode file. I am guessing all I need to do is write the Objective-C wrapper?
>>
>> Yeah, all you have to worry about, is writing the wrapper, as it is what I did with my code writing for my wrapper.
>>
>> The other issue I am having is the framework only contains one header file which links out to a series of files contained in a system extension.
>>
>> The header file, is all you need to import, as it should define all public API Access you need, including structs, to interface with the binary library.
>>
>> Am I able to write my wrapper in an Objective-C class from within my macruby application or do I need to create a bundle and import that into my project.
>>
>> You will need to write Pure Objective-C code for the API Access, but the code can be included with your macruby application, in the project itself. What will happen, is when you compile the main Objective C File, Main.m, it'll compile all the other Objective C files into the binary executable, that will eventually run your rb_main.rb file. It'll give all the access of your Objective C libraries that you wrote, right within your application.
>>
>> hth,
>>
>> Mario
>>
>> Thanks,
>>
>> Shaun
>>
>>
>>
>>
>> On 2010-10-19, at 10:12 PM, Mario Steele wrote:
>>
>>> Hello Shaun,
>>>
>>> On Wed, Oct 20, 2010 at 12:00 AM, Shaun August <shaun at eoslightmedia.com> wrote:
>>> Hi Robert,
>>>
>>> Thanks! That make sense. All those cocoa classes have capitals and they work fine. I seem to be able to call from the framework but I am running into an undefined method 'extern'. I have also read somewhere that extern doesn't work with MacRuby. Is that correct? The framework I am dealing with is calling C functions and I am having trouble accessing them.
>>>
>>> extern is a macro for the ld library, to export an API Address in the Dynamic library, that can be access dynamically at run time. With Objective-C, or more so specifically with MacRuby, you need to write a sort of thin wrapper around C Functions in Objective C, in order to access said Functions. So if the framework that you are working with, doesn't expose Objective C API Functions, you'll need to write a thin wrapper in order to access them. See the tutorial done by Nick Ludlam about wrapping the TagLib C Library, in Objective C. You can find it here: http://www.macruby.org/documentation/reading-an-mp3-with-macruby.html It's best to read through the entire article, as it gives you information about wrapping C Functions in Objective C, which is quite useful, when writing your own wrapper.
>>>
>>> hth,
>>>
>>> Mario
>>>
>>> Thanks,
>>>
>>> Shaun
>>>
>>>
>>> On 2010-10-19, at 8:26 PM, Robert Rice wrote:
>>>
>>> > Hi Shaun:
>>> >
>>> > Lower case method names is only a convention. MacRuby will work fine using upper case, i.e., constant, method names.
>>> > I know because I only recently changed my project to conform to the convention.
>>> >
>>> > Bob Rice
>>> >
>>> >
>>> > On Oct 19, 2010, at 7:17 PM, Shaun August wrote:
>>> >
>>> >> Hi There,
>>> >>
>>> >> I am attempting to work with a framework provided by a USB device manufacturer and all of their method names start with capitols and I am wondering about the easiest way to access these methods through macruby. I remember reading somewhere about fixing the constants in Obj-C but I cannot locate the information.
>>> >>
>>> >> Does anyone have any suggestions as to how to remedy this? Should I rename every command in the framework?
>>> >>
>>> >> Thanks,
>>> >>
>>> >> Shaun
>>> >>
>>> >> _______________________________________________
>>> >> 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
>>>
>>> _______________________________________________
>>> MacRuby-devel mailing list
>>> MacRuby-devel at lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>>
>>>
>>>
>>> --
>>> Mario Steele
>>> Lieutenant Commander 3
>>> XO - Geo 99
>>> XO - STO IFT Fleet
>>> http://www.trekfederation.com
>>> http://geo99.ruby-im.net
>>>
>>> _______________________________________________
>>> 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
>>
>>
>>
>>
>> --
>> Mario Steele
>> Lieutenant Commander 3
>> XO - Geo 99
>> XO - STO IFT Fleet
>> http://www.trekfederation.com
>> http://geo99.ruby-im.net
>>
>> _______________________________________________
>> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20101031/06e1d428/attachment.html>
More information about the MacRuby-devel
mailing list