TRACE_ERROR("[NULL-CHECK] Agent info");
return ;
}
- if (!user_data) {
- TRACE_ERROR("[NULL-CHECK] user_data");
+ dp_request_slots *request_slot = (dp_request_slots *) user_data;
+ if (request_slot == NULL || request_slot->request == NULL) {
+ TRACE_ERROR("[NULL-CHECK] request req_id:%d", info->download_id);
return ;
}
- dp_request *request = (dp_request *) user_data;
+ dp_request *request = request_slot->request;
if (request->id < 0 || (request->agent_id != info->download_id)) {
TRACE_ERROR("[NULL-CHECK] agent_id : %d req_id %d",
request->agent_id, info->download_id);
TRACE_ERROR("[NULL-CHECK] Agent info");
return ;
}
- if (!user_data) {
- TRACE_ERROR("[NULL-CHECK] user_data");
+ dp_request_slots *request_slot = (dp_request_slots *) user_data;
+ if (request_slot == NULL || request_slot->request == NULL) {
+ TRACE_ERROR("[NULL-CHECK] request req_id:%d", info->download_id);
return ;
}
- dp_request *request = (dp_request *) user_data;
+ dp_request *request = request_slot->request;
if (request->id < 0 || (request->agent_id != info->download_id)) {
- TRACE_ERROR("[NULL-CHECK][%d] agent_id : %d req_id %d",
- request->id, request->agent_id, info->download_id);
+ TRACE_ERROR("[NULL-CHECK] agent_id : %d req_id %d",
+ request->agent_id, info->download_id);
return ;
}
}
TRACE_INFO("Agent ID[%d] err[%d] http_status[%d]",
info->download_id, info->err, info->http_status);
- if (!user_data) {
- TRACE_ERROR("[NULL-CHECK] user_data");
+ dp_request_slots *request_slot = (dp_request_slots *) user_data;
+ if (request_slot == NULL || request_slot->request == NULL) {
+ TRACE_ERROR("[NULL-CHECK] request req_id:%d", info->download_id);
return ;
}
- dp_request *request = (dp_request *) user_data;
+ dp_request *request = request_slot->request;
if (request->id < 0 || (request->agent_id != info->download_id)) {
- TRACE_ERROR("[NULL-CHECK][%d] agent_id : %d req_id %d",
- request->id, request->agent_id, info->download_id);
+ TRACE_ERROR("[NULL-CHECK] agent_id : %d req_id %d",
+ request->agent_id, info->download_id);
return ;
}
static void __paused_cb(user_paused_info_t *info, void *user_data)
{
TRACE_INFO("");
- dp_request *request = (dp_request *) user_data;
- if (!request) {
- TRACE_ERROR("[NULL-CHECK] request");
+ dp_request_slots *request_slot = (dp_request_slots *) user_data;
+ if (request_slot == NULL || request_slot->request == NULL) {
+ TRACE_ERROR("[NULL-CHECK] request req_id:%d", info->download_id);
return ;
}
+ dp_request *request = request_slot->request;
if (request->id < 0 || (request->agent_id != info->download_id)) {
- TRACE_ERROR("[NULL-CHECK][%d] agent_id : %d req_id %d",
- request->id, request->agent_id, info->download_id);
+ TRACE_ERROR("[NULL-CHECK] agent_id : %d req_id %d",
+ request->agent_id, info->download_id);
return ;
}
// 0 : success
// -1 : failed
// -2 : pended
-dp_error_type dp_start_agent_download(dp_request *request)
+dp_error_type dp_start_agent_download(dp_request_slots *request_slot)
{
int da_ret = -1;
int req_dl_id = -1;
char *etag = NULL;
TRACE_INFO("");
- if (!request) {
+ if (request_slot == NULL || request_slot->request == NULL) {
TRACE_ERROR("[NULL-CHECK] download_clientinfo_slot");
return DP_ERROR_INVALID_PARAMETER;
}
+ dp_request *request = request_slot->request;
+ CLIENT_MUTEX_LOCK(&(request->mutex));
char *url = dp_request_get_url(request->id, request, &errorcode);
if (url == NULL) {
TRACE_ERROR("[ERROR][%d] URL is NULL", request->id);
+ CLIENT_MUTEX_UNLOCK(&(request->mutex));
return DP_ERROR_INVALID_URL;
}
char *destination =
}
}
- ext_data.user_data = (void *)request;
+ ext_data.user_data = (void *)request_slot;
// call start API of agent lib
da_ret =
if (da_ret == DA_ERR_ALREADY_MAX_DOWNLOAD) {
TRACE_INFO("[PENDING][%d] DA_ERR_ALREADY_MAX_DOWNLOAD [%d]",
request->id, da_ret);
+ CLIENT_MUTEX_UNLOCK(&(request->mutex));
return DP_ERROR_TOO_MANY_DOWNLOADS;
} else if (da_ret != DA_RESULT_OK) {
TRACE_ERROR("[ERROR][%d] DP_ERROR_CONNECTION_FAILED [%d]",
request->id, da_ret);
+ CLIENT_MUTEX_UNLOCK(&(request->mutex));
return __change_error(da_ret);
}
TRACE_INFO("[SUCCESS][%d] agent_id [%d]", request->id, req_dl_id);
request->agent_id = req_dl_id;
+ CLIENT_MUTEX_UNLOCK(&(request->mutex));
return DP_ERROR_NONE;
}
{
dp_error_type errcode = DP_ERROR_NONE;
- dp_request *request = (dp_request *) args;
- if (!request) {
+ dp_request_slots *request_slot = (dp_request_slots *) args;
+ if (request_slot == NULL || request_slot->request == NULL) {
TRACE_ERROR("[NULL-CHECK] download_clientinfo_slot");
pthread_exit(NULL);
return 0;
}
+ dp_request *request = request_slot->request;
if (dp_is_alive_download(request->agent_id)) {
errcode = dp_resume_agent_download(request->agent_id);
} else {
// call agent start function
- errcode = dp_start_agent_download(request);
+ errcode = dp_start_agent_download(request_slot);
}
CLIENT_MUTEX_LOCK(&(request->mutex));
/// @brief create thread.
/// @warning if failed to create thread, change to PENED.
/// @param the pointer of memory slot allocated for this request.
-static int __request_download_start_thread(dp_request *request)
+static int __request_download_start_thread(dp_request_slots *request_slot)
{
// declare all resources
pthread_t thread_pid;
pthread_attr_t thread_attr;
TRACE_INFO("");
- if (!request) {
+ if (request_slot == NULL || request_slot->request == NULL) {
TRACE_ERROR("[CRITICAL] Invalid Address");
return -1;
}
+ dp_request *request = request_slot->request;
// initialize
if (pthread_attr_init(&thread_attr) != 0) {
request->state = DP_STATE_CONNECTING;
if (pthread_create(&thread_pid, &thread_attr,
- __request_download_start_agent, request) != 0) {
+ __request_download_start_agent, request_slot) != 0) {
TRACE_STRERROR("[ERROR][%d] pthread_create", request->id);
pthread_attr_destroy(&thread_attr);
request->state = DP_STATE_QUEUED;
(privates->is_connected_wifi_direct == 1 &&
request->network_type ==
DP_NETWORK_TYPE_WIFI_DIRECT)) {
- if (__request_download_start_thread(request) == 0) {
+ if (__request_download_start_thread(&privates->requests[i]) == 0) {
TRACE_INFO
("[Guarantee Intant Download] Group [%s]", group->pkgname);
active_count++;
if (i >= 0) {
TRACE_INFO("Found WIFI-Direct request %d", i);
request = privates->requests[i].request;
- if (__request_download_start_thread(request) == 0)
+ if (__request_download_start_thread(&privates->requests[i]) == 0)
active_count++;
continue;
}
TRACE_INFO("QUEUE Status now %d active %d/%d", i,
active_count, DP_MAX_DOWNLOAD_AT_ONCE);
request = privates->requests[i].request;
- __request_download_start_thread(request);
+ __request_download_start_thread(&privates->requests[i]);
active_count++;
}
CLIENT_MUTEX_UNLOCK(&(g_dp_queue_mutex));