| 137 | } |
| 138 | |
| 139 | ISocketStream* get_from_pool(const EndPoint& ep) { |
| 140 | auto it = fdmap.find(ep); |
| 141 | if (it == fdmap.end()) return nullptr; |
| 142 | assert(it != fdmap.end()); |
| 143 | auto node = it->second.pop_front(); |
| 144 | rm_watch(node); |
| 145 | DEFER(delete node); |
| 146 | if (it->second.empty()) fdmap.erase(it); |
| 147 | return node->stream.release(); |
| 148 | } |
| 149 | |
| 150 | void push_into_pool(StreamListNode* node) { |
| 151 | fdmap[node->key].push_back(node); |