如下图为mqtt应用, send_write_tag_req()函数中cmd->driver,cmd->group 分别指向了req->node&&req->group; 而这两块内存在上层函数handle_write_req()中调用neu_json_decode_write_free()进行了内存释放。
但是cmd->driver,cmd->group 本来已经在南向驱动插件中,在
driver->adapter.cb_funs.driver.write_response() 回调函数中释放了。
因此,handle_write_req()->neu_json_decode_write_free()属于重复释放;据查看代码,mqtt和ekuiper插件均存在此现象,而rest插件则不存在。
感觉正确的逻辑应该是跟REST插件实现一样: neu_plugin_op(NEU_REQ_WRITE_TAG)返回成功则由南向驱动插件write_response() 回调负责释放neu_req_write_tag_t的内存;
若neu_plugin_op(NEU_REQ_WRITE_TAG)返回失败,则由调用者(北向应用)自行释放