Perf: remove unnecessary vector operations
Former-commit-id: 1b46d4f09ab73e08a1e77fd7f73d18e98dbdce7c
This commit is contained in:
parent
27e17220c2
commit
6de6515bfc
@ -1920,8 +1920,7 @@ void ProcessPendingAsyncWrites()
|
|||||||
* get it called, and so forth. */
|
* get it called, and so forth. */
|
||||||
int handleClientsWithPendingWrites(int iel, int aof_state) {
|
int handleClientsWithPendingWrites(int iel, int aof_state) {
|
||||||
std::unique_lock<fastlock> lockf(g_pserver->rgthreadvar[iel].lockPendingWrite);
|
std::unique_lock<fastlock> lockf(g_pserver->rgthreadvar[iel].lockPendingWrite);
|
||||||
auto &vec = g_pserver->rgthreadvar[iel].clients_pending_write;
|
int processed = 0;
|
||||||
int processed = (int)vec.size();
|
|
||||||
serverAssert(iel == (serverTL - g_pserver->rgthreadvar));
|
serverAssert(iel == (serverTL - g_pserver->rgthreadvar));
|
||||||
|
|
||||||
int ae_flags = AE_WRITABLE|AE_WRITE_THREADSAFE;
|
int ae_flags = AE_WRITABLE|AE_WRITE_THREADSAFE;
|
||||||
@ -1936,16 +1935,17 @@ int handleClientsWithPendingWrites(int iel, int aof_state) {
|
|||||||
ae_flags |= AE_BARRIER;
|
ae_flags |= AE_BARRIER;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(!vec.empty()) {
|
auto vec = std::move(g_pserver->rgthreadvar[iel].clients_pending_write);
|
||||||
client *c = vec.back();
|
processed += (int)vec.size();
|
||||||
|
|
||||||
|
for (client *c : vec) {
|
||||||
AssertCorrectThread(c);
|
AssertCorrectThread(c);
|
||||||
|
|
||||||
c->flags &= ~CLIENT_PENDING_WRITE;
|
uint64_t flags = c->flags.fetch_and(~CLIENT_PENDING_WRITE, std::memory_order_relaxed);
|
||||||
vec.pop_back();
|
|
||||||
|
|
||||||
/* If a client is protected, don't do anything,
|
/* If a client is protected, don't do anything,
|
||||||
* that may trigger write error or recreate handler. */
|
* that may trigger write error or recreate handler. */
|
||||||
if (c->flags & CLIENT_PROTECTED) continue;
|
if (flags & CLIENT_PROTECTED) continue;
|
||||||
|
|
||||||
std::unique_lock<decltype(c->lock)> lock(c->lock);
|
std::unique_lock<decltype(c->lock)> lock(c->lock);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user