diff --git a/main/stasis_message_router.c b/main/stasis_message_router.c index 2c8d0a7684d9abb10983d66a7ec3a0b707ff77a7..41d426beca577e98abf377ee43b0d938f090731b 100644 --- a/main/stasis_message_router.c +++ b/main/stasis_message_router.c @@ -208,7 +208,7 @@ static struct stasis_message_router *stasis_message_router_create_internal( struct stasis_topic *topic, int use_thread_pool) { int res; - RAII_VAR(struct stasis_message_router *, router, NULL, ao2_cleanup); + struct stasis_message_router *router; router = ao2_t_alloc(sizeof(*router), router_dtor, stasis_topic_name(topic)); if (!router) { @@ -219,6 +219,8 @@ static struct stasis_message_router *stasis_message_router_create_internal( res |= AST_VECTOR_INIT(&router->routes, 0); res |= AST_VECTOR_INIT(&router->cache_routes, 0); if (res) { + ao2_ref(router, -1); + return NULL; } @@ -228,10 +230,11 @@ static struct stasis_message_router *stasis_message_router_create_internal( router->subscription = stasis_subscribe(topic, router_dispatch, router); } if (!router->subscription) { + ao2_ref(router, -1); + return NULL; } - ao2_ref(router, +1); return router; }