Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
-// Unqueue the oldest request in the queue
-struct at_request *at_request_dequeue(void)
+// Unqueue a request in the queue
+struct at_request *at_request_dequeue(struct at_request *request)
- struct at_request *request = NULL;
struct at_request **requests = NULL;
int requests_count = 0;
int pos = -1;
struct at_request **requests = NULL;
int requests_count = 0;
int pos = -1;
- for(i=0 ; i < requests_count ; i++) {
- if(requests[i] != NULL) {
- request = requests[i];
- pos = i;
- break;
+ if(request == NULL) {
+ for(i=0 ; i < requests_count ; i++) {
+ if(requests[i] != NULL) {
+ request = requests[i];
+ pos = i;
+ break;
+ }
+ }
+ } else {
+ for(i=0 ; i < requests_count ; i++) {
+ if(requests[i] == request) {
+ pos = i;
+ break;
+ }
// We don't need to check on the async queue as requests are sent one at a time
LOGE("Got a response for another request, aborting!");
// We don't need to check on the async queue as requests are sent one at a time
LOGE("Got a response for another request, aborting!");
- AT_SYNC_QUEUE_UNLOCK();
if(sync_request->response == NULL) {
LOGE("Sync queue was unlocked but there is no response, aborting");
if(sync_request->response == NULL) {
LOGE("Sync queue was unlocked but there is no response, aborting");
+ // Remove the request
+ at_request_dequeue(request);
+
// Better trying to dequeue too
at_sync_request_dequeue(sync_request);
at_sync_request_free(sync_request);
// Better trying to dequeue too
at_sync_request_dequeue(sync_request);
at_sync_request_free(sync_request);
- request = at_request_dequeue();
+ request = at_request_dequeue(NULL);
if(request == NULL) {
LOGD("Nothing left to send!");
return 0;
if(request == NULL) {
LOGD("Nothing left to send!");
return 0;