Fix compiling error when message doesn't have a move constructor. (#1678)

* Fix compiling error when message doesn't have a move constructor.

* Clear response safely.
This commit is contained in:
xiehan
2025-01-07 01:57:22 +08:00
committed by GitHub
parent 5fbe73f5aa
commit b9062aeeff
2 changed files with 8 additions and 5 deletions

View File

@@ -367,7 +367,7 @@ public:
ProtocolMessage *
ComplexRedisSubscribeTask::SubscribeWrapper::next_in(ProtocolMessage *message)
{
redis_reply_t *reply = ((RedisResponse *)message)->result_ptr();
redis_reply_t *reply = task_->resp.result_ptr();
if (reply->type != REDIS_REPLY_TYPE_ARRAY)
{
@@ -385,7 +385,9 @@ ComplexRedisSubscribeTask::SubscribeWrapper::next_in(ProtocolMessage *message)
task_->watching_ = true;
task_->extract_(task_);
task_->clear_resp();
RedisResponse resp;
*(protocol::ProtocolMessage *)&resp = std::move(task_->resp);
task_->resp = std::move(resp);
return task_->finished_ ? NULL : &task_->resp;
}

View File

@@ -179,9 +179,10 @@ protected:
void clear_resp()
{
RESP resp;
*(protocol::ProtocolMessage *)&resp = std::move(this->resp);
this->resp = std::move(resp);
protocol::ProtocolMessage head(std::move(this->resp));
this->resp.~RESP();
new(&this->resp) RESP;
*(protocol::ProtocolMessage *)&this->resp = std::move(head);
}
void disable_retry()