Hi Shaun,

If it didn't crash in 18 hours it's probably a good sign :) but I would make 
sure the code this C framework calls back is thread-safe. Since you got that GC 
error message, I assume it's calling MacRuby code from different threads, so 
you may want to look at the MacRuby side of your project and protect access to 
shared objects (for example, if one of these methods mutate the contents of an 
instance variable, you may want to add a lock around).

Laurent

On Oct 31, 2010, at 9:20 PM, Shaun August wrote:

> Hi Laurent,
> 
> Thanks for the follow up. The C Framework I am working with is a USB library 
> for sensor kit called Phidgets.
> 
> http://www.phidgets.com/programming_resources.php
> 
> It is a cross-platform C Library so I am sure they are not using NSThread. 
> All their Cocoa examples were written a few years ago prior to Garbage 
> Collection. They do say in their documentation that all the functions are 
> thread safe. I don't have access to the source for the USB kext so I am not 
> sure how I would go about registering these threads. I am just starting to 
> work with this product so I am afraid I don't have a very in-depth knowledge 
> of how it works. 
> 
> I did run the software for 18 hours without an error message. (I get one when 
> I launch the application but as soon as I spawn an NSThread everything seems 
> to go smoothly). 
> 
> I know this is a very generic description and I do appreciate any extra 
> comments or suggestions you may have (ie. If I am setting myself up for 
> trouble!)
> 
> Thanks,
> 
> Shaun
> 
> 
> 
> On Sun, Oct 31, 2010 at 2:39 PM, Laurent Sansonetti <lsansone...@apple.com> 
> wrote:
> 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 <sh...@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 <sh...@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@lists.macosforge.org
>>>> >> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>>> >>
>>>> >
>>>> > _______________________________________________
>>>> > MacRuby-devel mailing list
>>>> > MacRuby-devel@lists.macosforge.org
>>>> > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>>> 
>>>> _______________________________________________
>>>> MacRuby-devel mailing list
>>>> MacRuby-devel@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@lists.macosforge.org
>>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>> 
>>> 
>>> _______________________________________________
>>> MacRuby-devel mailing list
>>> MacRuby-devel@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@lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>> 
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel@lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> 
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> 
> 
> 
> 
> 
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to