fix bug : leak private connections

This commit is contained in:
ken 2024-07-19 10:21:21 +08:00
parent ca1630a6b4
commit ad37c08f51
4 changed files with 13 additions and 5 deletions

View File

@ -906,7 +906,7 @@ void Handler::handleResponse(ConnectConnection* s, Request* req, Response* res)
default:
break;
}
if (s && !s->isShared()) {
if (s && !s->isShared() && res->code() != Response::ServerConnectionClose) {
if (!c->inTransaction() && !c->inSub(true)) {
mConnPool[s->server()->id()]->putPrivateConnection(s);
c->detachConnectConnection();

View File

@ -91,9 +91,12 @@ public:
P obj = mHead;
if (obj) {
Node* n = node((T*)obj);
mHead = n->next(Idx);
if (--mSize == 0) {
mTail = nullptr;
if (mHead == mTail) {
mHead = mTail = nullptr;
mSize = 0;
} else {
mHead = n->next(Idx);
--mSize;
}
n->reset(Idx);
}

View File

@ -59,7 +59,8 @@ Response::Response():
Response::Response(GenericCode code):
mType(Reply::None),
mInteger(0)
mInteger(0),
mCode(code)
{
auto r = GenericResponses[code];
mType = r->mType;

View File

@ -128,6 +128,9 @@ public:
{
return mRes;
}
GenericCode code() const {
return mCode;
}
private:
bool getAddr(int& slot, SString<Const::MaxAddrLen>& addr, const char* token) const;
private:
@ -135,6 +138,7 @@ private:
int64_t mInteger;
Segment mHead; //for mget
Segment mRes;
GenericCode mCode;
};
typedef List<Response> ResponseList;