From: Sam Hartman Date: Wed, 22 Oct 2014 18:20:37 +0000 (-0400) Subject: Use C++ destructors not finalizers X-Git-Tag: 0.9.3~4 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.git;a=commitdiff_plain;h=fdc24aea6397e4c8b91a8da322b81936989dedb5 Use C++ destructors not finalizers Rather than calling the attribute finalizer from a library level finalizer, do so from a C++ destructor. Hopefully this addresses a segfault on process termination (LP: #1201939) --- diff --git a/mech_eap/eap_mech.c b/mech_eap/eap_mech.c index 96e00c2..760d189 100644 --- a/mech_eap/eap_mech.c +++ b/mech_eap/eap_mech.c @@ -196,11 +196,6 @@ gssEapInitiatorInit(OM_uint32 *minor) void gssEapFinalize(void) { -#ifdef GSSEAP_ENABLE_ACCEPTOR - OM_uint32 minor; - - gssEapAttrProvidersFinalize(&minor); -#endif eap_peer_unregister_methods(); } diff --git a/mech_eap/util_attr.cpp b/mech_eap/util_attr.cpp index d1c0075..6058f36 100644 --- a/mech_eap/util_attr.cpp +++ b/mech_eap/util_attr.cpp @@ -90,24 +90,29 @@ gssEapAttrProvidersInit(OM_uint32 *minor) return gssEapAttrProvidersInitStatus; } -OM_uint32 -gssEapAttrProvidersFinalize(OM_uint32 *minor) -{ - if (gssEapAttrProvidersInitStatus == GSS_S_COMPLETE) { +namespace { + class finalize_class { + public: + ~finalize_class() + { + OM_uint32 minor = 0; + if (gssEapAttrProvidersInitStatus == GSS_S_COMPLETE) { #ifdef HAVE_SHIBRESOLVER - gssEapLocalAttrProviderFinalize(minor); + gssEapLocalAttrProviderFinalize(&minor); #endif #ifdef HAVE_OPENSAML - gssEapSamlAttrProvidersFinalize(minor); + gssEapSamlAttrProvidersFinalize(&minor); #endif - gssEapRadiusAttrProviderFinalize(minor); + gssEapRadiusAttrProviderFinalize(&minor); - gssEapAttrProvidersInitStatus = GSS_S_UNAVAILABLE; - } - - return GSS_S_COMPLETE; + gssEapAttrProvidersInitStatus = GSS_S_UNAVAILABLE; + } + } + } finalizer; } + + static gss_eap_attr_create_provider gssEapAttrFactories[ATTR_TYPE_MAX + 1]; /* diff --git a/mech_eap/util_attr.h b/mech_eap/util_attr.h index 2af0850..28067a9 100644 --- a/mech_eap/util_attr.h +++ b/mech_eap/util_attr.h @@ -379,9 +379,6 @@ OM_uint32 gssEapReleaseAttrContext(OM_uint32 *minor, gss_name_t name); -OM_uint32 -gssEapAttrProvidersFinalize(OM_uint32 *minor); - #ifdef __cplusplus } #endif