Posts Tagged OpenGL
iPhone (SIGBUS) Issue
Posted by Chris Danielson in iPhone Development on July 20th, 2009
If you’ve ever done any iPhone development, you’ve probably had an accident with the (nonatomic, retain) methods. These methods are difficult to use in the case where you’re working with multiple threads. Our application does not do this, but we do utilize the OpenGL ES 1.1 framework. Have a look at the following console log from the other night when my brother was beta testing our application with some friends at a bar.
Process: myExampleApp [800] Path: /var/mobile/Applications/5D234CF0-1234-4E2F-9A7F-14175F39A0B6/myExampleApp.app/myExampleApp Identifier: myExampleApp Version: ??? (???) Code Type: ARM (Native) Parent Process: launchd [1] Date/Time: 2009-07-19 23:20:40.285 -0700 OS Version: iPhone OS 3.0 (7A341) Report Version: 104 Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008 Crashed Thread: 0 Thread 0 Crashed: 0 libobjc.A.dylib 0x30011940 objc_msgSend + 20 1 libobjc.A.dylib 0x3001313c objc_setProperty + 160 2 myExampleApp 0x000126e6 -[GameUIView setBasicObj:] (GameUIView.m:36) 3 myExampleApp 0x0000f694 -[GameUIView setupView] (GameUIView.m:404) 4 myExampleApp 0x0000ec42 -[GameUIView start] (GameUIView.m:173) 5 myExampleApp 0x00002816 -[CoreViewController playGame] (CoreViewController.m:79) 6 myExampleApp 0x00005e80 -[SplashGLUIView touchesEnded:withEvent:] (SplashGLUIView.m:606) 7 UIKit 0x309a60d4 -[UIWindow _sendTouchesForEvent:] + 520 8 UIKit 0x309a5464 -[UIWindow sendEvent:] + 108 9 UIKit 0x30936e3c -[UIApplication sendEvent:] + 400 10 UIKit 0x30936874 _UIApplicationHandleEvent + 4336 11 GraphicsServices 0x32046964 PurpleEventCallback + 1028 12 CoreFoundation 0x30254a70 CFRunLoopRunSpecific + 2296 13 CoreFoundation 0x30254164 CFRunLoopRunInMode + 44 14 GraphicsServices 0x3204529c GSEventRunModal + 188 15 UIKit 0x308f0374 -[UIApplication _run] + 552 16 UIKit 0x308eea8c UIApplicationMain + 960 17 myExampleApp 0x000020b6 main (main.m:14) 18 myExampleApp 0x0000202c start + 44 |
The core method here that is the issue is implemented as:
//in the .h file. @property (nonatomic, retain) NSObject *basicObj; //in the .m file. @synthesize basicObj; - (void)setupView { if (self.basicObj != nil) { [self.basicObj release]; self.basicObj = nil; //line 404, this is where the error is located. } } |
As you can see, the issue appears to be based on how we access the basicObj object. The definition of a SIGBUS error, is pretty straight forward. We are generically having some sort of memory issue.
As of this writing, I’m still doing extensive testing and I’ll update this post if I find a better solution. Here is what I’ve found to work. I’m beginning to wonder if there is a funny timing issue with the “release” methodology. I’ll make sure to post back here if I find there to still be an issue or I find a better solution. Comments are appreciated.
- (void)setupView { if (self.basicObj != nil) { [basicObj release]; basicObj = nil; } |
I'm a software developer focused on all facets of enterprise solutions and technologies. Currently, I'm enjoying developing iPhone applications at night while spending much of my day working on Java, .Net and database implementations.
