Skip to content

Commit

Permalink
Add explicit assert to ensure thread_shared_qb won't expand (valkey-i…
Browse files Browse the repository at this point in the history
…o#938)

Although this won't happen now, adding this statement explicitly.

Signed-off-by: Binbin <[email protected]>
  • Loading branch information
enjoy-binbin authored Aug 25, 2024
1 parent c7d1dae commit 9f4b1ad
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/networking.c
Original file line number Diff line number Diff line change
Expand Up @@ -2521,7 +2521,8 @@ void resetClient(client *c) {
}
}

/* Initializes the shared query buffer to a new sds with the default capacity */
/* Initializes the shared query buffer to a new sds with the default capacity.
* Need to ensure the initlen is not less than readlen in readToQueryBuf. */
void initSharedQueryBuf(void) {
thread_shared_qb = sdsnewlen(NULL, PROTO_IOBUF_LEN);
sdsclear(thread_shared_qb);
Expand Down Expand Up @@ -3119,6 +3120,10 @@ void readToQueryBuf(client *c) {
qblen = sdslen(c->querybuf);
}

/* c->querybuf may be expanded. If so, the old thread_shared_qb will be released.
* Although we have ensured that c->querybuf will not be expanded in the current
* thread_shared_qb, we still add this check for code robustness. */
int use_thread_shared_qb = (c->querybuf == thread_shared_qb) ? 1 : 0;
if (!is_primary && // primary client's querybuf can grow greedy.
(big_arg || sdsalloc(c->querybuf) < PROTO_IOBUF_LEN)) {
/* When reading a BIG_ARG we won't be reading more than that one arg
Expand All @@ -3136,6 +3141,8 @@ void readToQueryBuf(client *c) {
/* Read as much as possible from the socket to save read(2) system calls. */
readlen = sdsavail(c->querybuf);
}
if (use_thread_shared_qb) serverAssert(c->querybuf == thread_shared_qb);

c->nread = connRead(c->conn, c->querybuf + qblen, readlen);
if (c->nread <= 0) {
return;
Expand Down

0 comments on commit 9f4b1ad

Please sign in to comment.