Re: [MacRuby-devel] Frameworks Help

2010-10-31 Thread Laurent Sansonetti
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  
>> 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  
>>> 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 f

Re: [MacRuby-devel] Frameworks Help

2010-10-31 Thread Shaun August
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
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  > 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 int