#include <new>
/* lazy initialisation */
-#ifdef WIN32
-static volatile OM_uint32 gssEapAttrProvidersInitStatus = GSS_S_UNAVAILABLE;
-#else
static GSSEAP_THREAD_ONCE gssEapAttrProvidersInitOnce = GSSEAP_ONCE_INITIALIZER;
static OM_uint32 gssEapAttrProvidersInitStatus = GSS_S_UNAVAILABLE;
-#endif
GSSEAP_ONCE_CALLBACK(gssEapAttrProvidersInitInternal)
{
if (GSS_ERROR(major))
goto cleanup;
-#ifdef HAVE_OPENSAML
- major = gssEapSamlAttrProvidersInit(&minor);
- if (GSS_ERROR(major))
- goto cleanup;
-#endif
#ifdef HAVE_SHIBRESOLVER
/* Allow Shibboleth initialization failure to be non-fatal */
gssEapLocalAttrProviderInit(&minor);
#endif
+#ifdef HAVE_OPENSAML
+ major = gssEapSamlAttrProvidersInit(&minor);
+ if (GSS_ERROR(major))
+ goto cleanup;
+#endif
cleanup:
#ifdef GSSEAP_DEBUG
GSSEAP_ASSERT(major == GSS_S_COMPLETE);
#endif
-#ifdef WIN32
- InterlockedCompareExchangeRelease(&gssEapAttrProvidersInitStatus,
- major, GSS_S_UNAVAILABLE);
-#else
gssEapAttrProvidersInitStatus = major;
-#endif
GSSEAP_ONCE_LEAVE;
}
static OM_uint32
gssEapAttrProvidersInit(OM_uint32 *minor)
{
-#ifdef WIN32
- if (gssEapAttrProvidersInitStatus == GSS_S_UNAVAILABLE)
- gssEapAttrProvidersInitInternal();
-#else
GSSEAP_ONCE(&gssEapAttrProvidersInitOnce, gssEapAttrProvidersInitInternal);
-#endif
if (GSS_ERROR(gssEapAttrProvidersInitStatus))
*minor = GSSEAP_NO_ATTR_PROVIDERS;