Skip to content

Commit 09df4f2

Browse files
committed
Bug fix: reset io_last_written on c->buf resize to prevent stale pointers
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
1 parent 864de55 commit 09df4f2

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

src/server.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,7 +987,11 @@ 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);
994+
991995
}
992996
return 0;
993997
}

0 commit comments

Comments
 (0)