Skip to content

Commit f54818c

Browse files
authored
Bug fix: reset io_last_written on c->buf resize to prevent stale pointers (valkey-io#2786)
Fixes an assert crash in _writeToClient(): serverAssert(c->io_last_written.data_len == 0 || c->io_last_written.buf == c->buf); The issue occurs when clientsCronResizeOutputBuffer() grows or reallocates c->buf while io_last_written still points to the old buffer and data_len is non-zero. On the next write, both conditions in the assertion become false. Reset io_last_written when resizing the output buffer to prevent stale pointers and keep state consistent. fixes valkey-io#2769 Signed-off-by: xbasel <103044017+xbasel@users.noreply.github.com>
1 parent 864de55 commit f54818c

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

src/server.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,9 @@ int clientsCronResizeOutputBuffer(client *c, mstime_t now_ms) {
987987
size_t oldbuf_size = c->buf_usable_size;
988988
c->buf = zmalloc_usable(new_buffer_size, &c->buf_usable_size);
989989
memcpy(c->buf, oldbuf, c->bufpos);
990+
if (c->io_last_written.buf == oldbuf) {
991+
c->io_last_written.buf = c->buf;
992+
}
990993
zfree_with_size(oldbuf, oldbuf_size);
991994
}
992995
return 0;

0 commit comments

Comments
 (0)