Simplify bridge topic linked list memory cleanup.

pull/2263/head
Roger A. Light 4 years ago
parent cad11de873
commit dbbffe054c

@ -170,7 +170,8 @@ int bridge__add_topic(struct mosquitto__bridge *bridge, const char *topic, enum
bridge->topic_count++; bridge->topic_count++;
cur_topic = mosquitto__malloc(sizeof(struct mosquitto__bridge_topic)); cur_topic = mosquitto__malloc(sizeof(struct mosquitto__bridge_topic));
if(cur_topic == NULL){ if(cur_topic == NULL){
goto oom; log__printf(NULL, MOSQ_LOG_ERR, "Error: Out of memory.");
return MOSQ_ERR_NOMEM;
} }
cur_topic->next = NULL; cur_topic->next = NULL;
@ -184,7 +185,7 @@ int bridge__add_topic(struct mosquitto__bridge *bridge, const char *topic, enum
}else{ }else{
cur_topic->topic = mosquitto__strdup(topic); cur_topic->topic = mosquitto__strdup(topic);
if(cur_topic->topic == NULL){ if(cur_topic->topic == NULL){
goto oom_topic; goto error;
} }
} }
@ -192,12 +193,12 @@ int bridge__add_topic(struct mosquitto__bridge *bridge, const char *topic, enum
bridge->topic_remapping = true; bridge->topic_remapping = true;
if(local_prefix){ if(local_prefix){
if(bridge__create_prefix(&cur_topic->local_prefix, cur_topic->topic, local_prefix, "local")){ if(bridge__create_prefix(&cur_topic->local_prefix, cur_topic->topic, local_prefix, "local")){
goto oom_lprefix; goto error;
} }
} }
if(remote_prefix){ if(remote_prefix){
if(bridge__create_prefix(&cur_topic->remote_prefix, cur_topic->topic, remote_prefix, "local")){ if(bridge__create_prefix(&cur_topic->remote_prefix, cur_topic->topic, remote_prefix, "local")){
goto oom_rprefix; goto error;
} }
} }
} }
@ -205,26 +206,26 @@ int bridge__add_topic(struct mosquitto__bridge *bridge, const char *topic, enum
if(bridge__create_remap_topic(cur_topic->local_prefix, if(bridge__create_remap_topic(cur_topic->local_prefix,
cur_topic->topic, &cur_topic->local_topic)){ cur_topic->topic, &cur_topic->local_topic)){
return MOSQ_ERR_INVAL; goto error;
} }
if(bridge__create_remap_topic(cur_topic->remote_prefix, if(bridge__create_remap_topic(cur_topic->remote_prefix,
cur_topic->topic, &cur_topic->remote_topic)){ cur_topic->topic, &cur_topic->remote_topic)){
return MOSQ_ERR_INVAL; goto error;
} }
LL_APPEND(bridge->topics, cur_topic); LL_APPEND(bridge->topics, cur_topic);
return MOSQ_ERR_SUCCESS; return MOSQ_ERR_SUCCESS;
oom_rprefix: error:
mosquitto__free(cur_topic->local_prefix); mosquitto__free(cur_topic->local_prefix);
oom_lprefix: mosquitto__free(cur_topic->remote_prefix);
mosquitto__free(cur_topic->local_topic);
mosquitto__free(cur_topic->remote_topic);
mosquitto__free(cur_topic->topic); mosquitto__free(cur_topic->topic);
oom_topic:
mosquitto__free(cur_topic); mosquitto__free(cur_topic);
oom:
log__printf(NULL, MOSQ_LOG_ERR, "Error: Out of memory."); log__printf(NULL, MOSQ_LOG_ERR, "Error: Out of memory.");
return MOSQ_ERR_NOMEM; return MOSQ_ERR_NOMEM;
} }

Loading…
Cancel
Save