From ba2d66fbd026a9b4a33f65f1de6573d4aa684e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Tue, 22 Jul 2003 19:51:31 +0000 Subject: [PATCH] use thread specific storage to set/get the kerberos error message git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12494 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/gssapi/display_status.c | 23 ++++++++++++++++++----- lib/gssapi/krb5/display_status.c | 23 ++++++++++++++++++----- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/lib/gssapi/display_status.c b/lib/gssapi/display_status.c index 2391596dc..bbe1c5ff3 100644 --- a/lib/gssapi/display_status.c +++ b/lib/gssapi/display_status.c @@ -35,8 +35,6 @@ RCSID("$Id$"); -static char *krb5_error_string; - static char * calling_error(OM_uint32 v) { @@ -116,14 +114,29 @@ supplementary_error(OM_uint32 v) void gssapi_krb5_set_error_string (void) { - krb5_error_string = krb5_get_error_string(gssapi_krb5_context); + struct gssapi_thr_context *ctx = gssapi_get_thread_context(1); + + if (ctx == NULL) + return; + HEIMDAL_MUTEX_lock(&ctx->mutex); + if (ctx->error_string) + free(ctx->error_string); + ctx->error_string = krb5_get_error_string(gssapi_krb5_context); + HEIMDAL_MUTEX_unlock(&ctx->mutex); } char * gssapi_krb5_get_error_string (void) { - char *ret = krb5_error_string; - krb5_error_string = NULL; + struct gssapi_thr_context *ctx = gssapi_get_thread_context(0); + char *ret; + + if (ctx == NULL) + return NULL; + HEIMDAL_MUTEX_lock(&ctx->mutex); + ret = ctx->error_string; + ctx->error_string = NULL; + HEIMDAL_MUTEX_unlock(&ctx->mutex); return ret; } diff --git a/lib/gssapi/krb5/display_status.c b/lib/gssapi/krb5/display_status.c index 2391596dc..bbe1c5ff3 100644 --- a/lib/gssapi/krb5/display_status.c +++ b/lib/gssapi/krb5/display_status.c @@ -35,8 +35,6 @@ RCSID("$Id$"); -static char *krb5_error_string; - static char * calling_error(OM_uint32 v) { @@ -116,14 +114,29 @@ supplementary_error(OM_uint32 v) void gssapi_krb5_set_error_string (void) { - krb5_error_string = krb5_get_error_string(gssapi_krb5_context); + struct gssapi_thr_context *ctx = gssapi_get_thread_context(1); + + if (ctx == NULL) + return; + HEIMDAL_MUTEX_lock(&ctx->mutex); + if (ctx->error_string) + free(ctx->error_string); + ctx->error_string = krb5_get_error_string(gssapi_krb5_context); + HEIMDAL_MUTEX_unlock(&ctx->mutex); } char * gssapi_krb5_get_error_string (void) { - char *ret = krb5_error_string; - krb5_error_string = NULL; + struct gssapi_thr_context *ctx = gssapi_get_thread_context(0); + char *ret; + + if (ctx == NULL) + return NULL; + HEIMDAL_MUTEX_lock(&ctx->mutex); + ret = ctx->error_string; + ctx->error_string = NULL; + HEIMDAL_MUTEX_unlock(&ctx->mutex); return ret; }