Merge pull request #190 from Barenboim/master

optimize messages' move constructor.
This commit is contained in:
xiehan
2020-12-22 15:43:37 +08:00
committed by GitHub
6 changed files with 41 additions and 34 deletions
+2 -4
View File
@@ -228,8 +228,7 @@ HttpMessage::HttpMessage(HttpMessage&& msg)
msg.size_limit = (size_t)-1;
this->parser = msg.parser;
msg.parser = new http_parser_t;
http_parser_init(this->parser->is_resp, msg.parser);
msg.parser = NULL;
INIT_LIST_HEAD(&this->output_body);
list_splice_init(&msg.output_body, &this->output_body);
@@ -251,8 +250,7 @@ HttpMessage& HttpMessage::operator = (HttpMessage&& msg)
delete this->parser;
this->parser = msg.parser;
msg.parser = new http_parser_t;
http_parser_init(this->parser->is_resp, msg.parser);
msg.parser = NULL;
this->clear_output_body();
list_splice_init(&msg.output_body, &this->output_body);
+5 -2
View File
@@ -193,8 +193,11 @@ public:
virtual ~HttpMessage()
{
this->clear_output_body();
http_parser_deinit(this->parser);
delete this->parser;
if (this->parser)
{
http_parser_deinit(this->parser);
delete this->parser;
}
}
/* for std::move() */
+13 -7
View File
@@ -1612,9 +1612,12 @@ KafkaMessage::KafkaMessage()
KafkaMessage::~KafkaMessage()
{
kafka_parser_deinit(this->parser);
delete this->parser;
delete this->stream;
if (this->parser)
{
kafka_parser_deinit(this->parser);
delete this->parser;
delete this->stream;
}
}
KafkaMessage::KafkaMessage(KafkaMessage&& msg)
@@ -1623,8 +1626,9 @@ KafkaMessage::KafkaMessage(KafkaMessage&& msg)
msg.size_limit = (size_t)-1;
this->parser = msg.parser;
msg.parser = new kafka_parser_t;
kafka_parser_init(msg.parser);
this->stream = msg.stream;
msg.parser = NULL;
msg.stream = NULL;
this->msgbuf = std::move(msg.msgbuf);
this->headbuf = std::move(msg.headbuf);
@@ -1652,10 +1656,12 @@ KafkaMessage& KafkaMessage::operator= (KafkaMessage &&msg)
kafka_parser_deinit(this->parser);
delete this->parser;
delete this->stream;
this->parser = msg.parser;
msg.parser = new kafka_parser_t;
kafka_parser_init(msg.parser);
this->stream = msg.stream;
msg.parser = NULL;
msg.stream = NULL;
this->msgbuf = std::move(msg.msgbuf);
this->headbuf = std::move(msg.headbuf);
+11 -12
View File
@@ -32,10 +32,13 @@ namespace protocol
MySQLMessage::~MySQLMessage()
{
mysql_parser_deinit(parser_);
mysql_stream_deinit(stream_);
delete parser_;
delete stream_;
if (parser_)
{
mysql_parser_deinit(parser_);
mysql_stream_deinit(stream_);
delete parser_;
delete stream_;
}
}
MySQLMessage::MySQLMessage(MySQLMessage&& move)
@@ -48,12 +51,10 @@ MySQLMessage::MySQLMessage(MySQLMessage&& move)
seqid_ = move.seqid_;
cur_size_ = move.cur_size_;
move.parser_ = new mysql_parser_t;
move.stream_ = new mysql_stream_t;
move.parser_ = NULL;
move.stream_ = NULL;
move.seqid_ = 0;
move.cur_size_ = 0;
mysql_parser_init(move.parser_);
mysql_stream_init(move.stream_);
}
MySQLMessage& MySQLMessage::operator= (MySQLMessage&& move)
@@ -73,12 +74,10 @@ MySQLMessage& MySQLMessage::operator= (MySQLMessage&& move)
seqid_ = move.seqid_;
cur_size_ = move.cur_size_;
move.parser_ = new mysql_parser_t;
move.stream_ = new mysql_stream_t;
move.parser_ = NULL;
move.stream_ = NULL;
move.seqid_ = 0;
move.cur_size_ = 0;
mysql_parser_init(move.parser_);
mysql_stream_init(move.stream_);
}
return *this;
+4 -6
View File
@@ -494,10 +494,9 @@ RedisMessage::RedisMessage(RedisMessage&& move)
stream_ = move.stream_;
cur_size_ = move.cur_size_;
move.parser_ = new redis_parser_t;
move.stream_ = new EncodeStream;
move.parser_ = NULL;
move.stream_ = NULL;
move.cur_size_ = 0;
redis_parser_init(move.parser_);
}
RedisMessage& RedisMessage::operator= (RedisMessage &&move)
@@ -515,10 +514,9 @@ RedisMessage& RedisMessage::operator= (RedisMessage &&move)
stream_ = move.stream_;
cur_size_ = move.cur_size_;
move.parser_ = new redis_parser_t;
move.stream_ = new EncodeStream;
move.parser_ = NULL;
move.stream_ = NULL;
move.cur_size_ = 0;
redis_parser_init(move.parser_);
}
return *this;
+6 -3
View File
@@ -321,9 +321,12 @@ inline RedisMessage::RedisMessage():
inline RedisMessage::~RedisMessage()
{
redis_parser_deinit(parser_);
delete parser_;
delete stream_;
if (parser_)
{
redis_parser_deinit(parser_);
delete parser_;
delete stream_;
}
}
inline bool RedisMessage::parse_success() const { return parser_->parse_succ; }