Ticket refs #11035 : session should not retried after connection request

This commit is contained in:
imen.bhiri 2016-12-21 14:01:52 +01:00
parent e5975d963d
commit d22ecbdd91
3 changed files with 11 additions and 5 deletions

5
cwmp.c
View file

@ -187,6 +187,7 @@ void cwmp_schedule_session (struct cwmp *cwmp)
static struct timespec time_to_wait = {0, 0};
bool retry = false;
cwmp->cwmp_cr_event = 0;
while (1)
{
pthread_mutex_lock (&(cwmp->mutex_session_send));
@ -219,7 +220,7 @@ void cwmp_schedule_session (struct cwmp *cwmp)
error = cwmp_schedule_rpc (cwmp,session);
CWMP_LOG (INFO,"End session");
run_session_end_func(session);
if (session->error == CWMP_RETRY_SESSION)
if (session->error == CWMP_RETRY_SESSION && (!list_empty(&(session->head_event_container)) || (list_empty(&(session->head_event_container)) && cwmp->cwmp_cr_event == 0)) )
{
error = cwmp_move_session_to_session_queue (cwmp, session);
CWMP_LOG(INFO,"Retry session, retry count = %d, retry in %ds",cwmp->retry_count_session,cwmp_get_retry_interval(cwmp));
@ -353,7 +354,7 @@ success:
retry:
CWMP_LOG (INFO,"Failed");
session->error = CWMP_RETRY_SESSION;
event_remove_noretry_event_container(session);
event_remove_noretry_event_container(session, cwmp);
end:
MXML_DELETE(session->tree_in);

View file

@ -406,7 +406,7 @@ int event_remove_all_event_container(struct session *session, int rem_from)
return CWMP_OK;
}
int event_remove_noretry_event_container(struct session *session)
int event_remove_noretry_event_container(struct session *session, struct cwmp *cwmp)
{
struct event_container *event_container;
struct dm_parameter *dm_parameter;
@ -420,7 +420,11 @@ int event_remove_noretry_event_container(struct session *session)
free_dm_parameter_all_fromlist(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free (event_container);
}
}
if (EVENT_CONST[event_container->code].CODE[0] == '6')
{
cwmp->cwmp_cr_event = 1;
}
}
return CWMP_OK;
}

View file

@ -275,6 +275,7 @@ typedef struct cwmp {
struct list_head head_session_queue;
pthread_mutex_t mutex_session_queue;
struct session *session_send;
bool cwmp_cr_event;
pthread_mutex_t mutex_session_send;
pthread_cond_t threshold_session_send;
pthread_mutex_t mutex_periodic;
@ -342,7 +343,7 @@ struct session *cwmp_add_queue_session (struct cwmp *cwmp);
struct rpc *cwmp_add_session_rpc_acs (struct session *session, int type);
struct event_container *cwmp_add_event_container (struct cwmp *cwmp, int event_idx, char *command_key);
int event_remove_all_event_container(struct session *session, int rem_from);
int event_remove_noretry_event_container(struct session *session);
int event_remove_noretry_event_container(struct session *session, struct cwmp *cwmp);
void cwmp_save_event_container (struct cwmp *cwmp,struct event_container *event_container);
void *thread_event_periodic (void *v);
void cwmp_add_notification(void);