Fix Coverity Scan 1486942 Resource leak

pull/2505/head
Roger A. Light 4 years ago
parent 87d059b57e
commit 0414a13347

@ -246,13 +246,16 @@ int db__close(void)
}
void db__msg_store_add(struct mosquitto_base_msg *base_msg)
int db__msg_store_add(struct mosquitto_base_msg *base_msg)
{
struct mosquitto_base_msg *found;
HASH_FIND(hh, db.msg_store, &base_msg->db_id, sizeof(base_msg->db_id), found);
if(found == NULL){
HASH_ADD(hh, db.msg_store, db_id, sizeof(base_msg->db_id), base_msg);
return MOSQ_ERR_SUCCESS;
}else{
return MOSQ_ERR_ALREADY_EXISTS;
}
}
@ -909,6 +912,8 @@ uint64_t db__new_msg_id(void)
/* This function requires topic to be allocated on the heap. Once called, it owns topic and will free it on error. Likewise payload and properties. */
int db__message_store(const struct mosquitto *source, struct mosquitto_base_msg *base_msg, uint32_t message_expiry_interval, dbid_t base_msg_id, enum mosquitto_msg_origin origin)
{
int rc;
assert(base_msg);
if(source && source->id){
@ -950,7 +955,11 @@ int db__message_store(const struct mosquitto *source, struct mosquitto_base_msg
base_msg->db_id = base_msg_id;
}
db__msg_store_add(base_msg);
rc = db__msg_store_add(base_msg);
if(rc){
db__msg_store_free(base_msg);
return rc;
}
return MOSQ_ERR_SUCCESS;
}

@ -740,7 +740,7 @@ int db__messages_delete_outgoing(struct mosquitto *context);
int db__messages_easy_queue(struct mosquitto *context, const char *topic, uint8_t qos, uint32_t payloadlen, const void *payload, int retain, uint32_t message_expiry_interval, mosquitto_property **properties);
int db__message_store(const struct mosquitto *source, struct mosquitto_base_msg *base_msg, uint32_t message_expiry_interval, dbid_t store_id, enum mosquitto_msg_origin origin);
int db__message_store_find(struct mosquitto *context, uint16_t mid, struct mosquitto_base_msg **base_msg);
void db__msg_store_add(struct mosquitto_base_msg *base_msg);
int db__msg_store_add(struct mosquitto_base_msg *base_msg);
void db__msg_store_remove(struct mosquitto_base_msg *base_msg, bool notify);
void db__msg_store_ref_inc(struct mosquitto_base_msg *base_msg);
void db__msg_store_ref_dec(struct mosquitto_base_msg **base_msg);

Loading…
Cancel
Save