diff options
author | Bang Kwang min <justine.bang@samsung.com> | 2012-09-05 09:56:30 +0900 |
---|---|---|
committer | Bang Kwang min <justine.bang@samsung.com> | 2012-09-05 14:40:42 +0900 |
commit | b30f360a4a2ff4f120b5613857afd81ca3790afa (patch) | |
tree | bcf44eea1b44744ca99bd5fcb972d2da38ee5a29 | |
parent | e48eb2611dfefe0836c7e44b3e52569a605ac441 (diff) | |
download | url-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.c | 20 |
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); |