From 6eef946305274eac296a40baba0c62e520b27edb Mon Sep 17 00:00:00 2001
From: wangxinyuan <wangxinyuan@zhihu.com>
Date: Mon, 15 Jun 2020 16:31:03 +0800
Subject: [PATCH] fix_pubsub_bug

---
 src/ConnectConnection.h     | 15 ++++++++++++---
 src/ConnectConnectionPool.h |  2 +-
 src/Handler.h               |  2 +-
 3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/ConnectConnection.h b/src/ConnectConnection.h
index 315acd1..fabe118 100644
--- a/src/ConnectConnection.h
+++ b/src/ConnectConnection.h
@@ -13,15 +13,23 @@
 #include "Request.h"
 #include "ResponseParser.h"
 
+enum ConnectConnectionListIndex
+{
+    PostConn = 0,
+    PrivateConn,
+
+    ConnListSize
+};
+
 class ConnectConnection :
     public ConnectSocket,
     public Connection,
-    public ListNode<ConnectConnection>,
+    public ListNode<ConnectConnection, ConnectConnection*, ConnectConnectionListIndex::ConnListSize>,
     public DequeNode<ConnectConnection>
 {
 public:
     typedef ConnectConnection Value;
-    typedef ListNode<ConnectConnection> ListNodeType;
+    typedef ListNode<ConnectConnection, ConnectConnection*, ConnectConnectionListIndex::ConnListSize> ListNodeType;
     typedef DequeNode<ConnectConnection> DequeNodeType;
     typedef Alloc<ConnectConnection, Const::ConnectConnectionAllocCacheSize> Allocator;
 public:
@@ -96,7 +104,8 @@ class ConnectConnection :
     bool mReadonly;
 };
 
-typedef List<ConnectConnection> ConnectConnectionList;
+typedef List<ConnectConnection, ConnectConnectionListIndex::PostConn> PostConnectConnectionList;
+typedef List<ConnectConnection, ConnectConnectionListIndex::PrivateConn> PrivateConnectConnectionList;
 typedef Deque<ConnectConnection> ConnectConnectionDeque;
 typedef ConnectConnection::Allocator ConnectConnectionAlloc;
 
diff --git a/src/ConnectConnectionPool.h b/src/ConnectConnectionPool.h
index 022fe28..71ee1ed 100644
--- a/src/ConnectConnectionPool.h
+++ b/src/ConnectConnectionPool.h
@@ -71,7 +71,7 @@ class ConnectConnectionPool
     Server* mServ;
     int mPendRequests;
     std::vector<ConnectConnection*> mShareConns;
-    std::vector<ConnectConnectionList> mPrivateConns;
+    std::vector<PrivateConnectConnectionList> mPrivateConns;
     ServerStats mStats;
     std::vector<LatencyMonitor> mLatencyMonitors;
 };
diff --git a/src/Handler.h b/src/Handler.h
index a2fc55f..1a248e2 100644
--- a/src/Handler.h
+++ b/src/Handler.h
@@ -120,7 +120,7 @@ class Handler : public ID<Handler>
     std::vector<ConnectConnectionPool*> mConnPool;
     AcceptConnectionDeque mAcceptConns;
     AcceptConnectionList mPostAcceptConns;
-    ConnectConnectionList mPostConnectConns;
+    PostConnectConnectionList mPostConnectConns;
     ConnectConnectionDeque mWaitConnectConns;
     long mStatsVer;
     HandlerStats mStats;