X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_thread_safe_nt.c;h=e0dad45a565f8acacf40c6c17afd8b6ca28be816;hp=1d9eaa4c7f680da58dd441270cb199cde15fede4;hb=d4110e29da41ce702bcc3327e86768c6f266915e;hpb=3d068765c6b6c8d096e0692f22e5b5e407948b54 diff --git a/src/rrd_thread_safe_nt.c b/src/rrd_thread_safe_nt.c index 1d9eaa4..e0dad45 100644 --- a/src/rrd_thread_safe_nt.c +++ b/src/rrd_thread_safe_nt.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.3rc2 Copyright by Tobi Oetiker, 1997-2008 + * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008 * This file: Copyright 2003 Peter Stamfest * & Tobias Oetiker * Distributed under the GPL @@ -38,20 +38,20 @@ static void context_destroy_context( static void context_init_context( void) { - if (!InterlockedExchange(&context_key_once, 1)) { + if (!InterlockedExchange((LONG*)(&context_key_once), 1)) { context_key = TlsAlloc(); InitializeCriticalSection(&CriticalSection); atexit(context_destroy_context); } } -struct rrd_context *rrd_get_context( +rrd_context_t *rrd_get_context( void) { - struct rrd_context *ctx; + rrd_context_t *ctx; context_init_context(); - ctx = TlsGetValue(context_key); + ctx = (rrd_context_t*)TlsGetValue(context_key); if (!ctx) { ctx = rrd_new_context(); TlsSetValue(context_key, ctx); @@ -59,19 +59,36 @@ struct rrd_context *rrd_get_context( return ctx; } + +/* this was added by the win32 porters Christof.Wegmann@exitgames.com */ + +rrd_context_t *rrd_force_new_context( + void) +{ + rrd_context_t *ctx; + + context_init_context(); + + ctx = rrd_new_context(); + TlsSetValue(context_key, ctx); + + return ctx; +} + + #undef strerror const char *rrd_strerror( int err) { - struct rrd_context *ctx; + rrd_context_t *ctx; context_init_context(); ctx = rrd_get_context(); EnterCriticalSection(&CriticalSection); - strncpy(ctx->lib_errstr, strerror(err), ctx->errlen); - ctx->lib_errstr[ctx->errlen] = '\0'; + strncpy(ctx->lib_errstr, strerror(err), sizeof(ctx->lib_errstr)); + ctx->lib_errstr[sizeof(ctx->lib_errstr) - 1] = '\0'; LeaveCriticalSection(&CriticalSection); return ctx->lib_errstr;