diff --git a/src/fdr/fdr_compile.cpp b/src/fdr/fdr_compile.cpp index bd074313..885c2c87 100644 --- a/src/fdr/fdr_compile.cpp +++ b/src/fdr/fdr_compile.cpp @@ -145,9 +145,7 @@ aligned_unique_ptr FDRCompiler::setupFDR(pair link) { size_t tabSize = eng.getTabSizeBytes(); auto floodControlTmp = setupFDRFloodControl(lits, eng); - - pair confirmTmp = - setupFullMultiConfs(lits, eng, bucketToLits, make_small); + auto confirmTmp = setupFullMultiConfs(lits, eng, bucketToLits, make_small); assert(ISALIGNED_16(tabSize)); assert(ISALIGNED_16(confirmTmp.second)); @@ -175,9 +173,8 @@ aligned_unique_ptr FDRCompiler::setupFDR(pair link) { copy(tab.begin(), tab.end(), ptr); ptr += tabSize; - memcpy(ptr, confirmTmp.first, confirmTmp.second); + memcpy(ptr, confirmTmp.first.get(), confirmTmp.second); ptr += confirmTmp.second; - aligned_free(confirmTmp.first); fdr->floodOffset = verify_u32(ptr - fdr_base); memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second); diff --git a/src/fdr/fdr_compile_internal.h b/src/fdr/fdr_compile_internal.h index e7376620..ac6d1257 100644 --- a/src/fdr/fdr_compile_internal.h +++ b/src/fdr/fdr_compile_internal.h @@ -57,9 +57,9 @@ class EngineDescription; class FDREngineDescription; struct hwlmStreamingControl; -std::pair setupFullMultiConfs( +std::pair, size_t> setupFullMultiConfs( const std::vector &lits, const EngineDescription &eng, - std::map > &bucketToLits, + std::map> &bucketToLits, bool make_small); // all suffixes include an implicit max_bucket_width suffix to ensure that diff --git a/src/fdr/fdr_confirm_compile.cpp b/src/fdr/fdr_confirm_compile.cpp index f65b36b9..4a129bc4 100644 --- a/src/fdr/fdr_confirm_compile.cpp +++ b/src/fdr/fdr_confirm_compile.cpp @@ -435,10 +435,11 @@ u32 setupMultiConfirms(const vector &lits, return totalConfirmSize; } -pair setupFullMultiConfs(const vector &lits, - const EngineDescription &eng, - map > &bucketToLits, - bool make_small) { +pair, size_t> +setupFullMultiConfs(const vector &lits, + const EngineDescription &eng, + map> &bucketToLits, + bool make_small) { BC2CONF bc2Conf; u32 totalConfirmSize = setupMultiConfirms(lits, eng, bc2Conf, bucketToLits, make_small); @@ -448,24 +449,24 @@ pair setupFullMultiConfs(const vector &lits, u32 totalConfSwitchSize = primarySwitch * nBuckets * sizeof(u32); u32 totalSize = ROUNDUP_16(totalConfSwitchSize + totalConfirmSize); - u8 *buf = (u8 *)aligned_zmalloc(totalSize); + auto buf = aligned_zmalloc_unique(totalSize); assert(buf); // otherwise would have thrown std::bad_alloc - u32 *confBase = (u32 *)buf; - u8 *ptr = buf + totalConfSwitchSize; + u32 *confBase = (u32 *)buf.get(); + u8 *ptr = buf.get() + totalConfSwitchSize; for (const auto &m : bc2Conf) { const BucketIndex &b = m.first.first; const u8 &c = m.first.second; const pair, size_t> &p = m.second; // confirm offset is relative to the base of this structure, now - u32 confirm_offset = verify_u32(ptr - (u8 *)buf); + u32 confirm_offset = verify_u32(ptr - buf.get()); memcpy(ptr, p.first.get(), p.second); ptr += p.second; u32 idx = c * nBuckets + b; confBase[idx] = confirm_offset; } - return make_pair(buf, totalSize); + return make_pair(move(buf), totalSize); } } // namespace ue2 diff --git a/src/fdr/teddy_compile.cpp b/src/fdr/teddy_compile.cpp index 80543bb4..21f5c901 100644 --- a/src/fdr/teddy_compile.cpp +++ b/src/fdr/teddy_compile.cpp @@ -315,8 +315,7 @@ aligned_unique_ptr TeddyCompiler::build(pair link) { size_t maskLen = eng.numMasks * 16 * 2 * maskWidth; auto floodControlTmp = setupFDRFloodControl(lits, eng); - pair confirmTmp - = setupFullMultiConfs(lits, eng, bucketToLits, make_small); + auto confirmTmp = setupFullMultiConfs(lits, eng, bucketToLits, make_small); size_t size = ROUNDUP_N(sizeof(Teddy) + maskLen + @@ -334,9 +333,8 @@ aligned_unique_ptr TeddyCompiler::build(pair link) { teddy->maxStringLen = verify_u32(maxLen(lits)); u8 *ptr = teddy_base + sizeof(Teddy) + maskLen; - memcpy(ptr, confirmTmp.first, confirmTmp.second); + memcpy(ptr, confirmTmp.first.get(), confirmTmp.second); ptr += confirmTmp.second; - aligned_free(confirmTmp.first); teddy->floodOffset = verify_u32(ptr - teddy_base); memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second);