From ffa035128a1867eba2c921a2512a4eef401696a5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ale=C5=A1=20K=C5=99enek?= Date: Wed, 12 Dec 2007 13:50:12 +0000 Subject: [PATCH] deal with uninitialized thread's cred_handle -- has this code been ever tested? --- org.glite.lb.logger/src/interlogd.c | 2 +- org.glite.lb.logger/src/send_event.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/org.glite.lb.logger/src/interlogd.c b/org.glite.lb.logger/src/interlogd.c index 390d6c9..9991e08 100644 --- a/org.glite.lb.logger/src/interlogd.c +++ b/org.glite.lb.logger/src/interlogd.c @@ -337,7 +337,7 @@ main (int argc, char **argv) /* initialize credential key and get credentials */ /* IMPORTANT: no other threads may run at the time, the key initialization has to be done exactly once */ - if(pthread_key_create(&cred_handle_key, cred_handle_destroy) < 0) + if(pthread_key_create(&cred_handle_key, cred_handle_destroy) != 0) abort(); if (CAcert_dir) setenv("X509_CERT_DIR", CAcert_dir, 1); diff --git a/org.glite.lb.logger/src/send_event.c b/org.glite.lb.logger/src/send_event.c index 2bea9a2..3e9444d 100644 --- a/org.glite.lb.logger/src/send_event.c +++ b/org.glite.lb.logger/src/send_event.c @@ -181,13 +181,14 @@ event_queue_connect(struct event_queue *eq) tv.tv_usec = 0; /* get thread specific pointer to credentials */ local_cred_handle = pthread_getspecific(cred_handle_key); + /* check if there are new credentials */ if(pthread_mutex_lock(&cred_handle_lock) < 0) abort(); if(local_cred_handle != cred_handle) { il_log(LOG_DEBUG, " new credentials were found, discarding old\n"); /* decrement counter in credentials, if it goes to zero, deallocate */ - if(--(local_cred_handle->counter) == 0) { + if(local_cred_handle && --(local_cred_handle->counter) == 0) { edg_wll_gss_release_cred(&local_cred_handle->creds, &gss_stat); free(local_cred_handle); il_log(LOG_DEBUG, " freed old credentials, not used anymore\n"); -- 1.8.2.3