Use stack for decoding integer-encoded values in list push

Less heap allocations when commands like LMOVE push integer values.
This commit is contained in:
Viktor Söderqvist 2021-02-12 12:31:41 +01:00 committed by Oran Agra
parent f521498b43
commit 683e530cf3

View File

@ -41,10 +41,13 @@
void listTypePush(robj *subject, robj *value, int where) { void listTypePush(robj *subject, robj *value, int where) {
if (subject->encoding == OBJ_ENCODING_QUICKLIST) { if (subject->encoding == OBJ_ENCODING_QUICKLIST) {
int pos = (where == LIST_HEAD) ? QUICKLIST_HEAD : QUICKLIST_TAIL; int pos = (where == LIST_HEAD) ? QUICKLIST_HEAD : QUICKLIST_TAIL;
value = getDecodedObject(value); if (value->encoding == OBJ_ENCODING_INT) {
size_t len = sdslen(value->ptr); char buf[32];
quicklistPush(subject->ptr, value->ptr, len, pos); ll2string(buf, 32, (long)value->ptr);
decrRefCount(value); quicklistPush(subject->ptr, buf, strlen(buf), pos);
} else {
quicklistPush(subject->ptr, value->ptr, sdslen(value->ptr), pos);
}
} else { } else {
serverPanic("Unknown list encoding"); serverPanic("Unknown list encoding");
} }