Merge pull request #5131 from soloestoy/optimize-xdel

Streams: free lp if all elements are deleted
This commit is contained in:
Salvatore Sanfilippo 2018-07-16 12:39:38 +02:00 committed by GitHub
commit a317f55d25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -705,10 +705,15 @@ void streamIteratorRemoveEntry(streamIterator *si, streamID *current) {
/* Change the valid/deleted entries count in the master entry. */
unsigned char *p = lpFirst(lp);
aux = lpGetInteger(p);
lp = lpReplaceInteger(lp,&p,aux-1);
p = lpNext(lp,p); /* Seek deleted field. */
aux = lpGetInteger(p);
lp = lpReplaceInteger(lp,&p,aux+1);
if (aux == 1) {
lpFree(lp);
raxRemove(si->stream->rax,si->ri.key,si->ri.key_len,NULL);
} else {
lp = lpReplaceInteger(lp,&p,aux-1);
p = lpNext(lp,p); /* Seek deleted field. */
aux = lpGetInteger(p);
lp = lpReplaceInteger(lp,&p,aux+1);
}
/* Update the number of entries counter. */
si->stream->length--;