From fdf4c5c26e61560c7be922fd67bea742b3929757 Mon Sep 17 00:00:00 2001 From: XieHan Date: Mon, 21 Dec 2020 20:17:18 +0800 Subject: [PATCH] optimize messages' move constructor. --- src/protocol/HttpMessage.cc | 6 ++---- src/protocol/HttpMessage.h | 7 +++++-- src/protocol/KafkaMessage.cc | 20 +++++++++++++------- src/protocol/MySQLMessage.cc | 23 +++++++++++------------ src/protocol/RedisMessage.cc | 10 ++++------ src/protocol/RedisMessage.h | 9 ++++++--- 6 files changed, 41 insertions(+), 34 deletions(-) diff --git a/src/protocol/HttpMessage.cc b/src/protocol/HttpMessage.cc index f71af971..11c2c646 100644 --- a/src/protocol/HttpMessage.cc +++ b/src/protocol/HttpMessage.cc @@ -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); diff --git a/src/protocol/HttpMessage.h b/src/protocol/HttpMessage.h index dbb57bcc..8cd372ba 100644 --- a/src/protocol/HttpMessage.h +++ b/src/protocol/HttpMessage.h @@ -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() */ diff --git a/src/protocol/KafkaMessage.cc b/src/protocol/KafkaMessage.cc index 6a38fc11..3beb1ad5 100644 --- a/src/protocol/KafkaMessage.cc +++ b/src/protocol/KafkaMessage.cc @@ -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); diff --git a/src/protocol/MySQLMessage.cc b/src/protocol/MySQLMessage.cc index 90a29ecb..7ca861b5 100644 --- a/src/protocol/MySQLMessage.cc +++ b/src/protocol/MySQLMessage.cc @@ -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; diff --git a/src/protocol/RedisMessage.cc b/src/protocol/RedisMessage.cc index 4cf7c2ab..20e1f839 100644 --- a/src/protocol/RedisMessage.cc +++ b/src/protocol/RedisMessage.cc @@ -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; diff --git a/src/protocol/RedisMessage.h b/src/protocol/RedisMessage.h index 41235262..f16b80ca 100644 --- a/src/protocol/RedisMessage.h +++ b/src/protocol/RedisMessage.h @@ -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; }