void mamaTimeZone_cleanUp () { if (sThreadStarted) { sThreadStarted = 0; wsem_post (&sTzSem); wthread_join (sThread, NULL); wsem_destroy (&sTzSem); } }
mama_status avisBridgeMamaTransport_destroy (transportBridge transport) { mama_status status; avisTransportBridge* transportBridge = (avisTransportBridge*) transport; avisBridgeImpl* avisBridge = NULL; mamaBridgeImpl* bridgeImpl = NULL; bridgeImpl = mamaTransportImpl_getBridgeImpl( avisTransport(transport)->mTransport); if (!bridgeImpl) { mama_log (MAMA_LOG_LEVEL_ERROR, "avisBridgeMamaTransport_destroy(): Could not get bridge"); free(transport); return MAMA_STATUS_PLATFORM; } status = mamaBridgeImpl_getClosure((mamaBridge) bridgeImpl, (void**) &avisBridge); if (MAMA_STATUS_OK != status) { mama_log (MAMA_LOG_LEVEL_ERROR, "avisBridgeMamaTransport_destroy(): Could not get Avis bridge object"); free(transport); return status; } if (1 == wInterlocked_read (&transportBridge->mDispatching)) { avisTransportBridge_stop (transportBridge); } elvin_remove_close_listener (transportBridge->mAvis, closeListener); if (!elvin_close (transportBridge->mAvis)) { /* there appears to be a race condition in Avis libs where router socket * can sometimes be closed before we receive the disconnect reply -- log * it, and continue */ log_avis_error(MAMA_LOG_LEVEL_FINE, transportBridge->mAvis); } wInterlocked_destroy (&transportBridge->mDispatching); wsem_destroy(&avisTransport(transport)->mAvisDispatchSem); free(avisTransport(transport)->mAvis); free(avisTransport(transport)); return MAMA_STATUS_OK; }
mama_status avisBridgeMamaSubscription_destroy (subscriptionBridge subscriber) { mama_status status = MAMA_STATUS_OK; wombatQueue queue = NULL; avisTransportBridge* avisTransport = NULL; CHECK_SUBSCRIBER(subscriber); mamaTransport_getBridgeTransport ( avisSub(subscriber)->mTransport, (void*) &avisTransport); if (!avisTransport) return MAMA_STATUS_INVALID_ARG; if (avisTransportBridge_isDispatching (avisTransport)) { elvin_invoke (avisSub(subscriber)->mAvis, &unsubscribeAvis, avisSub(subscriber)->mAvisSubscription); } else { unsubscribeAvis (avisSub(subscriber)->mAvis, avisSub(subscriber)->mAvisSubscription); } avisSub(subscriber)->mAvisSubscription = NULL; mamaQueue_getNativeHandle(avisSub(subscriber)->mQueue, &queue); if (!queue) { mama_log (MAMA_LOG_LEVEL_ERROR, "avisBridgeMamaSubscription_destroy(): " "Could not get event queue."); return MAMA_STATUS_PLATFORM; } avisSub(subscriber)->mMamaCallback.onDestroy ( avisSub(subscriber)->mMamaSubscription, avisSub(subscriber)->mClosure); wsem_destroy(&avisSub(subscriber)->mCreateDestroySem); free(avisSub(subscriber)->mSubject); free(avisSub(subscriber)); return status; }