Help: pointer being freed was not allocated problem (C# iOS)

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;

Can you try running in Instruments?

Ive tried instruments but can’t see what I’m looking for… I’ve attached trace… if that helps

Instruments11.trace.zip (2.6 MB)