mama_status avisBridgeMamaSubscription_destroy (subscriptionBridge subscriber) { mama_status status = MAMA_STATUS_OK; wombatQueue queue = NULL; CHECK_SUBSCRIBER(subscriber); elvin_subscription_remove_listener(avisSub(subscriber)->mAvisSubscription, avis_callback); if (!elvin_unsubscribe(avisSub(subscriber)->mAvis, avisSub(subscriber)->mAvisSubscription)) { // NOTE: elvin_unsubscribe sometimes returns failure for no apparent reason, so dont log errors here: // 2011-09-02 11:59:10: avis error code=2, error msg=Illegal frame size: 61 //log_avis_error(MAMA_LOG_LEVEL_ERROR, avisSub(subscriber)->mAvis); //status = MAMA_STATUS_PLATFORM; } free(avisSub(subscriber)->mAvisSubscription); mamaQueue_getNativeHandle(avisSub(subscriber)->mQueue, &queue); if (!queue) { mama_log (MAMA_LOG_LEVEL_ERROR, "avis_callback(): " "Could not get event queue."); return MAMA_STATUS_PLATFORM; } wombatQueue_enqueue (queue, destroy_callback, (void*)subscriber, NULL); return status; }
static void unsubscribeAvis (Elvin* avis, void* closure) { Subscription* sub = (Subscription*) closure; elvin_subscription_remove_listener (sub, avis_callback); if (!elvin_unsubscribe(avis, sub)) { mama_log (MAMA_LOG_LEVEL_ERROR, "unsubscribeAvis(): " "Failed to unsubscribe to: %s", sub->subscription_expr); } free (sub); }