index 4faa99591605cfc69eafaa408c86e0d1e0197e69..762805518f7387914d492e99c62348c3f2a3a55a 100644 (file)
--- a/src/rrd_thread_safe_nt.c
+++ b/src/rrd_thread_safe_nt.c
/*****************************************************************************
- * RRDtool 1.3rc6 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.8 Copyright by Tobi Oetiker, 1997-2009
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
/* Once-only initialisation of the key */
-static DWORD context_key_once = 0;
+static volatile LONG context_key_once = 0;
/* Free the thread-specific rrd_context - we might actually use
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);
return ctx;
}
+#ifdef WIN32
+ 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;
+ }
+#endif
+
#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;