X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=mech_eap%2Futil_tld.c;h=05bc3d11923030141bcc40fc408793f03f5b6f2f;hb=23bbef1fbb4bcaffb9b954a409942b2807476a08;hp=a30f5f3e910c97301393fdc3c7db6ab11dbaf019;hpb=4556a0409ceba59b0345e6f0b050786add7ac00f;p=mech_eap.orig diff --git a/mech_eap/util_tld.c b/mech_eap/util_tld.c index a30f5f3..05bc3d1 100644 --- a/mech_eap/util_tld.c +++ b/mech_eap/util_tld.c @@ -56,13 +56,23 @@ destroyThreadLocalData(struct gss_eap_thread_local_data *tld) * data and uses this index with TlsSetValue() to store it. * It can then subsequently be retrieved with TlsGetValue(). */ -static DWORD tlsIndex; +static DWORD tlsIndex = TLS_OUT_OF_INDEXES; /* Access thread-local data */ struct gss_eap_thread_local_data * gssEapGetThreadLocalData(void) { - return TlsGetValue(tlsIndex); + struct gss_eap_thread_local_data *tlsData; + + GSSEAP_ASSERT(tlsIndex != TLS_OUT_OF_INDEXES); + + tlsData = TlsGetValue(tlsIndex); + if (tlsData == NULL) { + tlsData = GSSEAP_CALLOC(1, sizeof(*tlsData)); + TlsSetValue(tlsIndex, tlsData); + } + + return tlsData; } BOOL WINAPI @@ -87,8 +97,9 @@ DllMain(HINSTANCE hDLL, /* DLL module handle */ case DLL_THREAD_ATTACH: /* Initialize the TLS index for this thread. */ tlsData = GSSEAP_CALLOC(1, sizeof(*tlsData)); - if (tlsData != NULL) - TlsSetValue(tlsIndex, tlsData); + if (tlsData == NULL) + return FALSE; + TlsSetValue(tlsIndex, tlsData); break; case DLL_THREAD_DETACH: /* Release the allocated memory for this thread. */