diff options
author | Sébastien Bianti <sebastien.bianti@linux.intel.com> | 2012-04-18 15:27:47 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-04-18 17:29:57 +0200 |
commit | a606d1f86190bc4bbf4bdf639c1329a3c47f8a48 (patch) | |
tree | 4a38034f3264df2576934241b158638fd89d943b | |
parent | 35439b9723183a5dd87b4b0f0e41c3f6c33f5330 (diff) | |
download | mmsd-a606d1f86190bc4bbf4bdf639c1329a3c47f8a48.tar.gz |
service: add requeue functionality
-rw-r--r-- | src/service.c | 26 |
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; |