Example #1
0
void
mamaTimeZone_cleanUp ()
{
    if (sThreadStarted)
    {
        sThreadStarted = 0;
        wsem_post (&sTzSem);
        wthread_join (sThread, NULL);
        wsem_destroy (&sTzSem);
    }
}
Example #2
0
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;
}
Example #3
0
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;
}