incubator-callback-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marc Rhodes (Created) (JIRA)" <>
Subject [jira] [Created] (CB-401) Crash on iOS when taking multiple pictures
Date Tue, 27 Mar 2012 23:34:29 GMT
Crash on iOS when taking multiple pictures

                 Key: CB-401
             Project: Apache Callback
          Issue Type: Bug
          Components: iOS
    Affects Versions: 1.4.0
         Environment: 1.4.1, 1.5.0 on iOS
Crash on iPad (third generation)
            Reporter: Marc Rhodes
            Assignee: Shazron Abdullah
            Priority: Critical

We have an app that allows the user to take four pictures. It had been working fine but we
started seeing crashes when we tested on a new iPad (third generation).

We have eliminated the crash in our application by making the following change to the PhongeGap/Cordova
code. I tested with PhoneGap 1.4.1. I'm currently upgrading to Cordova 1.5.0 but a review
of {{Camera.m}}/{{CDVCamera.m}} shows only the name changes.

Line numbers below correspond to {{CDVCamera.m}}.

In {{CDVCamera.m}}, we found the following code around line 67:

if (self.pickerController == nil) 
    self.pickerController = [[[CameraPicker alloc] init] autorelease];

We removed the autorelease message:

if (self.pickerController == nil) 
    self.pickerController = [[CameraPicker alloc] init];

Our reason for doing this is that we found that {{self.pickerController}} appears to be released
in all the right places:

* at line 220 in {{imagePickerController:didFinishPickingMediaWithInfo:}}

		self.pickerController = nil;

* at line 251 in {{imagePickerControllerDidCancel:}}

		self.pickerController = nil;

* at line 399 in {{dealloc}}:

		self.pickerController = nil;

This last one may not always be necessary but should be okay since the previous releases set
the instance variable to {{nil}}. And, of course, since pickerController is a property, setting
it to {{nil}} serves to release it.

I think both autoreleasing and explicitly releasing an object is not following the memory
management rules. Apple says:

* []
* Memory Management Policy
	** Basic Memory Management Rules
		*** You relinquish ownership of an object by sending it a release message or an autorelease

My thought (confirmed with an instructor at [Big Nerd Ranch|])
is that "or" is the key word in this statement and removing the extra autorelease could certainly
prevent zombie crashes that only occur in certain circumstances.

This issue seems like a duplicate of [CB-264|]
but since that one is resolved as "won't fix," I have submitted this new issue containing
a possible solution.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:!default.jspa
For more information on JIRA, see:


View raw message