Fix Off-By-One Error in Counting DDS Search Attempts

This caused us to double-search the first position and fail to search the
last position in the chain, slowing down search and making it less effective.
This commit is contained in:
W. Felix Handte 2020-08-17 17:43:01 -04:00
parent d46306087b
commit df386b3d8d

View File

@ -575,7 +575,7 @@ size_t ZSTD_HcFindBestMatch_generic (
const U32 ddsMinChain = ddsSize > ddsChainSize ? ddsSize - ddsChainSize : 0;
const U32 bucketSize = (1 << DD_BLOG);
U32 attemptNb = 0;
U32 attemptNb = 1;
matchIndex = dms->hashTable[ddsIdx];
@ -603,7 +603,7 @@ size_t ZSTD_HcFindBestMatch_generic (
break;
}
if (attemptNb < bucketSize - 1) {
if (attemptNb < bucketSize) {
matchIndex = dms->hashTable[ddsIdx + attemptNb];
} else {
matchIndex = dms->chainTable[matchIndex & ddsChainMask];