summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBang Kwang min <justine.bang@samsung.com>2012-09-05 09:56:30 +0900
committerBang Kwang min <justine.bang@samsung.com>2012-09-05 14:40:42 +0900
commitb30f360a4a2ff4f120b5613857afd81ca3790afa (patch)
treebcf44eea1b44744ca99bd5fcb972d2da38ee5a29
parente48eb2611dfefe0836c7e44b3e52569a605ac441 (diff)
downloadurl-download-b30f360a4a2ff4f120b5613857afd81ca3790afa.tar.gz
url-download-b30f360a4a2ff4f120b5613857afd81ca3790afa.tar.bz2
url-download-b30f360a4a2ff4f120b5613857afd81ca3790afa.zip
check the state before clear socket
[Title] check the state before clear socket [Issue#] N/A [Problem] N/A [Cause] N/A [Solution] N/A [SCMRequest] N/A Change-Id: I5c1e45420042cfeb3fff1701506401cc9e7da937
-rw-r--r--src/url_download_provider.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/url_download_provider.c b/src/url_download_provider.c
index f8a4a6e..bb6e579 100644
--- a/src/url_download_provider.c
+++ b/src/url_download_provider.c
@@ -474,7 +474,12 @@ void *run_event_server(void *args)
url_download_provider_error(stateinfo.err),
download->callback.stopped_user_data);
}
- if (download) {
+ // check state again,
+ // some client may change the state in callback
+ if (download
+ && (download->state == URL_DOWNLOAD_STATE_COMPLETED
+ || download->state == URL_DOWNLOAD_STATE_FAILED
+ || download->state == URL_DOWNLOAD_STATE_READY)) {
_clear_download_provider(download->sockfd);
_clear_socket(download->sockfd);
download->sockfd = 0;
@@ -500,7 +505,11 @@ void *run_event_server(void *args)
download->state = URL_DOWNLOAD_STATE_COMPLETED;
if (download->callback.completed)
download->callback.completed(download, download->completed_path, download->callback.completed_user_data);
- if (download) {
+ // check state again,
+ // some client may change the state in callback
+ if (download
+ && (download->state == URL_DOWNLOAD_STATE_COMPLETED
+ || download->state == URL_DOWNLOAD_STATE_FAILED)) {
_clear_download_provider(download->sockfd);
_clear_socket(download->sockfd);
download->sockfd = 0;
@@ -520,7 +529,11 @@ void *run_event_server(void *args)
url_download_provider_error(stateinfo.err),
download->callback.stopped_user_data);
}
- if (download) {
+ // check state again,
+ // some client may change the state in callback
+ if (download
+ && (download->state == URL_DOWNLOAD_STATE_COMPLETED
+ || download->state == URL_DOWNLOAD_STATE_FAILED)) {
_clear_download_provider(download->sockfd);
_clear_socket(download->sockfd);
download->sockfd = 0;
@@ -638,6 +651,7 @@ int url_download_create_by_id(int id, url_download_h *download)
// disconnect from download-provider
int url_download_destroy(url_download_h download)
{
+ LOGI("[%s][%d]",__FUNCTION__, __LINE__);
if (download == NULL)
return url_download_error(__FUNCTION__, URL_DOWNLOAD_ERROR_INVALID_PARAMETER, NULL);