parse-embedded-sdks
parse-embedded-sdks copied to clipboard
embedded library seems to run infinite loop inside parseProcessNextPushNotification function.
Testing / evaluating parse using an Ubuntu Linux computer. Parse UNIX library seems to be in a continuous loop eating 100% of CPU. The problematic code seems to be in parse.c, function: int parseProcessNextPushNotification(ParseClient client), the following lines:
while (length == -1 && parse_push_message_size < sizeof(parse_push_message_buffer)) {
CURLcode result = curl_easy_recv(clientInternal->pushCurlHandle,
parse_push_message_buffer + parse_push_message_size,
sizeof(parse_push_message_buffer) - parse_push_message_size,
&read);
if (result == CURLE_OK) {
parseLog(PARSE_LOG_INFO, "got ok!\n");
parse_push_message_size += read;
message = (char *)getPushJson(parse_push_message_buffer,
parse_push_message_size,
&start,
&length);
} else if (result == CURLE_AGAIN) {
break;
} else {
parseLog(PARSE_LOG_ERROR, "curl_easy_recv read %i an error %s\n", length, curl_easy_strerror(result));
if (clientInternal->pushCallback != NULL) {
clientInternal->pushCallback(client, ECONNRESET, NULL);
}
return 0;
}
}
The while loop continues to run as the CURLcode result = curl_easy_recv returns CURLE_OK. However the 'read' parameter passed to curl_easy_recv has a value of 0 after call that indicates a closed connection according to http://curl.haxx.se/libcurl/c/curl_easy_recv.html. The result is 100% cpu utilization and inability to process subsequent push messages. I think the correct form would be to use if ((result == CURLE_OK) && (read > 0))
Hi @dfszb, let me look at and fix it. Do you have an easy way to reproduce this problem?
It happened randomly. Sometimes just waiting, other times when wifi lost connection.