From 151f21bfad682a3f687ffbc39209b92b6aac3774 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zden=C4=9Bk=20Salvet?= Date: Thu, 4 Jun 2009 14:34:40 +0000 Subject: [PATCH] Track preemptability of connection correctly. --- org.glite.lb.logger/src/interlogd.h | 1 + org.glite.lb.logger/src/send_event.c | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/org.glite.lb.logger/src/interlogd.h b/org.glite.lb.logger/src/interlogd.h index 50c7264..4ef2f2b 100644 --- a/org.glite.lb.logger/src/interlogd.h +++ b/org.glite.lb.logger/src/interlogd.h @@ -183,6 +183,7 @@ struct event_queue { int max_len; /* max queue length */ int cur_len; /* current length */ int throttling; /* event insertion suspend flag */ + int first_event_sent; /* connection can be preempted by server */ }; diff --git a/org.glite.lb.logger/src/send_event.c b/org.glite.lb.logger/src/send_event.c index 4796859..cb1a40b 100644 --- a/org.glite.lb.logger/src/send_event.c +++ b/org.glite.lb.logger/src/send_event.c @@ -214,6 +214,7 @@ event_queue_connect(struct event_queue *eq) eq->timeout = TIMEOUT; return(0); } + eq->first_event_sent = 0; } #ifdef LB_PERF @@ -237,6 +238,7 @@ event_queue_close(struct event_queue *eq) edg_wll_gss_close(&eq->gss, NULL); eq->gss.context = NULL; } + eq->first_event_sent = 0; #ifdef LB_PERF } #endif @@ -251,7 +253,6 @@ event_queue_close(struct event_queue *eq) int event_queue_send(struct event_queue *eq) { - int events_sent = 0; assert(eq != NULL); #ifdef LB_PERF @@ -287,7 +288,7 @@ event_queue_send(struct event_queue *eq) tv.tv_usec = 0; ret = edg_wll_gss_write_full(&eq->gss, msg->msg, msg->len, &tv, &bytes_sent, &gss_stat); if(ret < 0) { - if (ret == EDG_WLL_GSS_ERROR_ERRNO && errno == EPIPE && events_sent > 0) + if (ret == EDG_WLL_GSS_ERROR_ERRNO && errno == EPIPE && eq->first_event_sent ) eq->timeout = 0; else eq->timeout = TIMEOUT; @@ -296,7 +297,7 @@ event_queue_send(struct event_queue *eq) if((code = get_reply(eq, &rep, &code_min)) < 0) { /* could not get the reply properly, so try again later */ - if (events_sent>0) { + if (eq->first_event_sent) { /* could be expected server connection preemption */ clear_error(); eq->timeout = 1; @@ -352,7 +353,7 @@ event_queue_send(struct event_queue *eq) il_log(LOG_ERR, "send_event: %s\n", error_get_msg()); event_queue_remove(eq); - events_sent++; + eq->first_event_sent = 1; break; } /* switch */ -- 1.8.2.3