aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSébastien Bianti <sebastien.bianti@linux.intel.com>2012-04-18 15:27:47 +0200
committerMarcel Holtmann <marcel@holtmann.org>2012-04-18 17:29:57 +0200
commita606d1f86190bc4bbf4bdf639c1329a3c47f8a48 (patch)
tree4a38034f3264df2576934241b158638fd89d943b
parent35439b9723183a5dd87b4b0f0e41c3f6c33f5330 (diff)
downloadmmsd-a606d1f86190bc4bbf4bdf639c1329a3c47f8a48.tar.gz
service: add requeue functionality
-rw-r--r--src/service.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/service.c b/src/service.c
index bcfd9e0..f25e656 100644
--- a/src/service.c
+++ b/src/service.c
@@ -1807,6 +1807,25 @@ exit:
return TRUE;
}
+static gboolean mms_requeue_request(struct mms_request *request)
+{
+ request->attempt += 1;
+
+ if (request->attempt == MAX_ATTEMPTS)
+ return FALSE;
+
+ if (request->type == MMS_REQUEST_TYPE_GET) {
+ request->fd = open(request->data_path, O_WRONLY | O_TRUNC,
+ S_IWUSR | S_IRUSR);
+ if (request->fd < 0)
+ return FALSE;
+ }
+
+ g_queue_push_tail(request->service->request_queue, request);
+
+ return TRUE;
+}
+
static gboolean web_get_cb(GWebResult *result, gpointer user_data)
{
gsize written;
@@ -1847,7 +1866,12 @@ complete:
else {
mms_error("Fail to get data (http status = %03u)",
request->status);
- unlink(request->data_path);
+ if (mms_requeue_request(request) == TRUE)
+ mms_error("retry later");
+ else {
+ unlink(request->data_path);
+ mms_request_destroy(request);
+ }
}
request->service->current_request_id = 0;