Re: [MacRuby-devel] Frameworks Help
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
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
