Skip to content

free(): double free detected in tcache 2 #568

@hc7

Description

@hc7

When I have enough intensively output publishing (100 per second). I have got double free inside MQTTAsunc lib. PLease see snippet:

Program terminated with signal SIGABRT, Aborted.
#0  0x0000ffff8a121ec8 in ?? () from /lib/libc.so.6
[Current thread is 1 (LWP 1247)]
>>> bt full
#0  0x0000ffff8a121ec8 in ?? () from /lib/libc.so.6
No symbol table info available.
#1  0x0000ffff8a0ddd50 in raise () from /lib/libc.so.6
No symbol table info available.
#2  0x0000ffff8a0caf64 in abort () from /lib/libc.so.6
No symbol table info available.
#3  0x0000ffff8a115b08 in ?? () from /lib/libc.so.6
No symbol table info available.
#4  0x0000ffff8a12c150 in ?? () from /lib/libc.so.6
No symbol table info available.
#5  0x0000ffff8a12e2f0 in ?? () from /lib/libc.so.6
No symbol table info available.
#6  0x0000ffff8a130a78 in free () from /lib/libc.so.6
No symbol table info available.
#7  0x0000ffff914b7e38 in MQTTProtocol_removePublication (p=0xffff44001300) at /root/atom/depend/src/paho.mqtt.cpp/externals/paho-mqtt-c/src/MQTTProtocolClient.c:302
No locals.
#8  MQTTProtocol_emptyMessageList (msgList=0xffff540328b0) at /root/atom/depend/src/paho.mqtt.cpp/externals/paho-mqtt-c/src/MQTTProtocolClient.c:1018
        m = 0xffff44000e70
        current = 0xffff44001220
#9  0x0000ffff914cb204 in MQTTAsync_cleanSession (client=0xffff5402a430) at /root/atom/depend/src/paho.mqtt.cpp/externals/paho-mqtt-c/src/MQTTAsyncUtils.c:2594
        rc = 0
        found = 0x0
#10 0x0000ffff914cb43c in MQTTAsync_closeSession (props=0xffff440013b8, reasonCode=<optimized out>, client=<optimized out>) at /root/atom/depend/src/paho.mqtt.cpp/externals/paho-mqtt-c/src/MQTTAsyncUtils.c:2498
No locals.
#11 MQTTAsync_checkDisconnect (handle=0xffff54032650, command=command@entry=0xffff44001370) at /root/atom/depend/src/paho.mqtt.cpp/externals/paho-mqtt-c/src/MQTTAsyncUtils.c:979
        was_connected = <optimized out>
        m = 0xffff54032650
#12 0x0000ffff914ce0a4 in MQTTAsync_processCommand () at /root/atom/depend/src/paho.mqtt.cpp/externals/paho-mqtt-c/src/MQTTAsyncUtils.c:1552
        rc = 0
        command = 0xffff44001370
        cur_command = 0xffff44000d00
        ignored_clients = <optimized out>
#13 0x0000ffff914ce984 in MQTTAsync_sendThread (n=<optimized out>) at /root/atom/depend/src/paho.mqtt.cpp/externals/paho-mqtt-c/src/MQTTAsyncUtils.c:1844
        rc = <optimized out>
        command_count = <optimized out>
        timeout = 1000
#14 0x0000ffff8a1202e8 in ?? () from /lib/libc.so.6
No symbol table info available.
#15 0x0000ffff8a187c5c in ?? () from /lib/libc.so.6
No symbol table info available.

Code in my programm:

 
int MQTTNodeSingleton::mqtt_publish(
    const std::string& topic_name,
    const std::string& value,
    int qos)
{
    std::lock_guard<std::mutex> lock(mutex_);
    if ((!mqtt_client) || (mqtt_state!=mqtt_connection_state::RUNNING))
    {
        return 1;
    }
    if (vin_.empty())
    {
        return 2;
    }
    const std::string& full_topic_name = GenerateFullTopicName(topic_name);
    try
    {
        auto msg = mqtt::make_message(full_topic_name, value);
        if (default_qos == MQTTNodeSingleton::NOQOS) {
            msg->set_qos(qos);
        } else {
            msg->set_qos(default_qos);
        }

        if (qos > 0)
        {
            global_count_out_ += 1;
        }

        // Async publish without waiting
        mqtt_client->publish(msg);
        return 0;
    }
    catch (const mqtt::exception& exc)
    {
        mqtt_state=mqtt_connection_state::STOPPED;  // will be mqtt_client.reset and reconnect with new;
        MQTT_LOG_ERROR() << "EXCP (publish): " << exc.what();
    }
    catch (const std::bad_alloc& ex) {
        mqtt_state=mqtt_connection_state::STOPPED;  // will be mqtt_client.reset and reconnect with new;
        MQTT_LOG_ERROR() << "EXCP (publish): Memory allocation failed: " << ex.what() ;
    }
    return 3;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions