change:更改内存删除分配方式。
This commit is contained in:
parent
99607c6721
commit
61ac79c93e
@ -123,15 +123,6 @@ void CClient::print_help(bool detail)
|
|||||||
TLOGI("{}", sp);
|
TLOGI("{}", sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::free_buf_manual(CFrameBuffer* buf)
|
|
||||||
{
|
|
||||||
if (buf == nullptr) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
delete buf->data_;
|
|
||||||
buf->data_ = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CClient::run(const std::string& ip, const std::string& port, const std::string& config_dir)
|
void CClient::run(const std::string& ip, const std::string& port, const std::string& config_dir)
|
||||||
{
|
{
|
||||||
fs::path fp(config_dir);
|
fs::path fp(config_dir);
|
||||||
@ -1099,8 +1090,6 @@ void CClient::handle_frame(CFrameBuffer* buf)
|
|||||||
buf->type_ = TYPE_GET_DIRFILES_DONE;
|
buf->type_ = TYPE_GET_DIRFILES_DONE;
|
||||||
msg_info.str = out;
|
msg_info.str = out;
|
||||||
}
|
}
|
||||||
delete[] buf->data_;
|
|
||||||
buf->data_ = nullptr;
|
|
||||||
serialize(msg_info, &buf->data_, buf->len_);
|
serialize(msg_info, &buf->data_, buf->len_);
|
||||||
std::swap(buf->tid_, buf->fid_);
|
std::swap(buf->tid_, buf->fid_);
|
||||||
if (!send_frame(buf)) {
|
if (!send_frame(buf)) {
|
||||||
@ -1216,10 +1205,15 @@ void CClient::handle_frame(CFrameBuffer* buf)
|
|||||||
TLOGE("{} GetList deserialize failed.", __LINE__);
|
TLOGE("{} GetList deserialize failed.", __LINE__);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
delete[] buf->data_;
|
|
||||||
buf->data_ = nullptr;
|
|
||||||
msg_info.str = variable_and_reverse_files(msg_info.str);
|
msg_info.str = variable_and_reverse_files(msg_info.str);
|
||||||
serialize(msg_info, &buf->data_, buf->len_);
|
serialize(msg_info, &buf->data_, buf->len_);
|
||||||
|
|
||||||
|
CMessageInfo tp(buf->fid_);
|
||||||
|
if (!deserialize(buf->data_, buf->len_, tp)) {
|
||||||
|
TLOGE("{} GetList deserialize failed.", __LINE__);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
std::swap(buf->tid_, buf->fid_);
|
std::swap(buf->tid_, buf->fid_);
|
||||||
buf->type_ = TYPE_REQUEST_UPDATE_LIST;
|
buf->type_ = TYPE_REQUEST_UPDATE_LIST;
|
||||||
if (!send_frame(buf)) {
|
if (!send_frame(buf)) {
|
||||||
@ -1229,12 +1223,12 @@ void CClient::handle_frame(CFrameBuffer* buf)
|
|||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
case TYPE_REQUEST_UPDATE_LIST: {
|
case TYPE_REQUEST_UPDATE_LIST: {
|
||||||
|
CMessageInfo msg_info(buf->fid_);
|
||||||
std::map<std::string, std::string> files;
|
std::map<std::string, std::string> files;
|
||||||
if (down_ && down_->trans_state_ == TRANS_REDAY) {
|
if (down_ && down_->trans_state_ == TRANS_REDAY) {
|
||||||
TLOGW("Update Busy......, Ignore {}", buf->fid_);
|
TLOGW("Update Busy......, Ignore {}", buf->fid_);
|
||||||
buf->type_ = TYPE_BUSY_UPDATE_LIST;
|
buf->type_ = TYPE_BUSY_UPDATE_LIST;
|
||||||
} else {
|
} else {
|
||||||
CMessageInfo msg_info(buf->fid_);
|
|
||||||
if (!deserialize(buf->data_, buf->len_, msg_info)) {
|
if (!deserialize(buf->data_, buf->len_, msg_info)) {
|
||||||
TLOGE("{} GetList deserialize failed.", __LINE__);
|
TLOGE("{} GetList deserialize failed.", __LINE__);
|
||||||
break;
|
break;
|
||||||
@ -1246,6 +1240,7 @@ void CClient::handle_frame(CFrameBuffer* buf)
|
|||||||
buf->type_ = TYPE_UNCONFIRM_UPDATE_LIST;
|
buf->type_ = TYPE_UNCONFIRM_UPDATE_LIST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
serialize(msg_info, &buf->data_, buf->len_);
|
||||||
std::swap(buf->tid_, buf->fid_);
|
std::swap(buf->tid_, buf->fid_);
|
||||||
if (!send_frame(buf)) {
|
if (!send_frame(buf)) {
|
||||||
TLOGE("Send Failed {}.", __LINE__);
|
TLOGE("Send Failed {}.", __LINE__);
|
||||||
@ -1360,7 +1355,9 @@ void CClient::send_file_data_th(const char* keys)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_buf_manual(buf.get());
|
delete[] buf->data_;
|
||||||
|
buf->data_ = nullptr;
|
||||||
|
|
||||||
buf->type_ = TYPE_TRANS_FILE;
|
buf->type_ = TYPE_TRANS_FILE;
|
||||||
buf->mark_ = 1;
|
buf->mark_ = 1;
|
||||||
|
|
||||||
@ -1377,7 +1374,7 @@ void CClient::send_file_data_th(const char* keys)
|
|||||||
cur_send_size = t->file_.gcount();
|
cur_send_size = t->file_.gcount();
|
||||||
msg_info.data.resize(cur_send_size);
|
msg_info.data.resize(cur_send_size);
|
||||||
send_size += cur_send_size;
|
send_size += cur_send_size;
|
||||||
serialize(msg_info, &buf->data_, buf->len_);
|
serialize(msg_info, &buf->data_, buf->len_, true);
|
||||||
if (!send_frame(buf.get())) {
|
if (!send_frame(buf.get())) {
|
||||||
report_trans_ret(TRANS_FAILED, str_key);
|
report_trans_ret(TRANS_FAILED, str_key);
|
||||||
TLOGE("Stop Trans {} To {} failed.", t->cur_file_, str_key);
|
TLOGE("Stop Trans {} To {} failed.", t->cur_file_, str_key);
|
||||||
|
@ -71,7 +71,6 @@ private:
|
|||||||
std::string read_uuid();
|
std::string read_uuid();
|
||||||
void get_id();
|
void get_id();
|
||||||
void print_help(bool detail);
|
void print_help(bool detail);
|
||||||
void free_buf_manual(CFrameBuffer* buf);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void handle_frame(CFrameBuffer* buf);
|
void handle_frame(CFrameBuffer* buf);
|
||||||
|
@ -134,7 +134,7 @@ CFrameBuffer::~CFrameBuffer()
|
|||||||
len_ = 0;
|
len_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void serialize(CMessageInfo& msg_info, char** out_buf, int& len)
|
void serialize(CMessageInfo& msg_info, char** out_buf, int& len, bool reuse_mem)
|
||||||
{
|
{
|
||||||
auto& info = msg_info;
|
auto& info = msg_info;
|
||||||
info.id = localtou8(info.id);
|
info.id = localtou8(info.id);
|
||||||
@ -149,9 +149,14 @@ void serialize(CMessageInfo& msg_info, char** out_buf, int& len)
|
|||||||
// 调用方负责确保内存够用性(len <= 可用最大空间长度)和内存可用性。
|
// 调用方负责确保内存够用性(len <= 可用最大空间长度)和内存可用性。
|
||||||
// 即,如果调用方及高频率调用 serialize, 且每次 len <= 已分配空间就复用内存,完了再释放。
|
// 即,如果调用方及高频率调用 serialize, 且每次 len <= 已分配空间就复用内存,完了再释放。
|
||||||
// 低频率或者 len 不固定时,每次都释放内存,并置 nullptr。
|
// 低频率或者 len 不固定时,每次都释放内存,并置 nullptr。
|
||||||
if (*out_buf == nullptr) {
|
if (*out_buf) {
|
||||||
|
if (!reuse_mem) {
|
||||||
|
delete[] *out_buf;
|
||||||
*out_buf = new char[len]; // 分配内存(调用方负责释放)
|
*out_buf = new char[len]; // 分配内存(调用方负责释放)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
*out_buf = new char[len];
|
||||||
|
}
|
||||||
|
|
||||||
char* ptr = *out_buf + kz + 1;
|
char* ptr = *out_buf + kz + 1;
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ struct CMessageInfo {
|
|||||||
std::string data;
|
std::string data;
|
||||||
};
|
};
|
||||||
|
|
||||||
void serialize(CMessageInfo& msg_info, char** out_buf, int& len);
|
void serialize(CMessageInfo& msg_info, char** out_buf, int& len, bool reuse_mem = false);
|
||||||
bool deserialize(char* data, int len, CMessageInfo& msg_info);
|
bool deserialize(char* data, int len, CMessageInfo& msg_info);
|
||||||
std::string u8tolocal(const std::string& str);
|
std::string u8tolocal(const std::string& str);
|
||||||
std::string localtou8(const std::string& str);
|
std::string localtou8(const std::string& str);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user