Anyway to diagnose this problem…
~> Process started.
AtomIOS(1433,0x700000323000) malloc: *** error for object 0x7fa980da1478: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
!> Received signal 6 on thread 44e8
I think its this method that is causing problems…
public Boolean ProcessRequestSync(WebVerb verb, String url, String apiClientKey, String authToken, String cultureCode, Byte[] body, out Byte[] responseData, out String errorMessage) {
bool success = true;
var request = NSMutableURLRequest.requestWithURL(NSURL.URLWithString(url)) cachePolicy(0) timeoutInterval(30);
if (verb == WebVerb.GET) {
request.HTTPMethod = "GET";
} else if (verb == WebVerb.POST) {
request.HTTPMethod = "POST";
} else if (verb == WebVerb.PUT) {
request.HTTPMethod = "PUT";
} else if (verb == WebVerb.DELETE) {
request.HTTPMethod = "DELETE";
}
if (apiClientKey != null && apiClientKey.length > 0) {
request.setValue(apiClientKey) forHTTPHeaderField("Api-Client-Key");
}
if (authToken != null && authToken.length > 0) {
request.setValue(authToken) forHTTPHeaderField("Authorization");
}
if (cultureCode != null && cultureCode.length > 0) {
request.setValue(cultureCode) forHTTPHeaderField("Accept-Language");
}
request.setValue("application/json") forHTTPHeaderField("Content-Type");
if (body != null && body.length > 0) {
request.HTTPBody = NSData.alloc().initWithBytes(body) length(body.length);
}
dispatch_semaphore_t sem;
sem = dispatch_semaphore_create(0);
string errorMessgaeResult;
byte[] responseDataResult;
var session = NSURLSession.sharedSession().dataTaskWithRequest(request) completionHandler((NSData data, NSURLResponse response, NSError error) => {
if (response != null && error == null) {
var httpResponse = (NSHTTPURLResponse)response;
if (httpResponse.statusCode >= 300) {
errorMessgaeResult = "Status code: " + httpResponse.statusCode.stringValue;
success = false;
} else {
long length = data.length.longValue;
var buffer = new byte[length];
data.getBytes(buffer) length(length);
responseDataResult = buffer;
}
} else if (error != null) {
errorMessgaeResult = error.localizedDescription;
success = false;
} else {
errorMessgaeResult = "Request failed without providing an error.";
success = false;
}
dispatch_semaphore_signal(sem);
});
session.resume();
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
errorMessage = errorMessgaeResult;
responseData = responseDataResult;
return success;
}
example how being called…
byte[] responseData;
string errorMessage;
if (!ProcessRequestSync(WebVerb.POST, RootLinks.Projects, _ApiClientKey, _AuthToken, _CultureCode, new JsonDocument(createProject.Deserialize()).ToJson().ToByteArray(), out responseData, out errorMessage)) {
return;
}
// this line crashes as response data i think is being freed
var jsonProjectNode = JsonDocument.FromString(EncodingHelpers.GetString(EncodingHelpers.GetEncoding("UTF8"), responseData, 0, responseData.length)).Root;