diff --git a/src/iocore/cache/CacheDir.cc b/src/iocore/cache/CacheDir.cc index 525b57371ea..0cb0d80486d 100644 --- a/src/iocore/cache/CacheDir.cc +++ b/src/iocore/cache/CacheDir.cc @@ -878,7 +878,7 @@ dir_lookaside_cleanup(Stripe *stripe) DDbg(dbg_ctl_dir_lookaside, "cleanup %X %X cleaned up", b->evac_frags.earliest_key.slice32(0), b->evac_frags.earliest_key.slice32(1)); i.remove(b); - free_CacheVC(b->earliest_evacuator); + free_CacheEvacuateDocVC(b->earliest_evacuator); free_EvacuationBlock(b, stripe->mutex->thread_holding); b = nb; goto Lagain; diff --git a/src/iocore/cache/CacheEvacuateDocVC.cc b/src/iocore/cache/CacheEvacuateDocVC.cc index cac8d4a990f..99d73190726 100644 --- a/src/iocore/cache/CacheEvacuateDocVC.cc +++ b/src/iocore/cache/CacheEvacuateDocVC.cc @@ -87,7 +87,7 @@ CacheEvacuateDocVC::evacuateDocDone(int /* event ATS_UNUSED */, Event * /* e ATS earliest_evac->total_len += doc->data_len(); if (earliest_evac->total_len == earliest_evac->doc_len) { dir_lookaside_fixup(&evac->earliest_key, this->stripe); - free_CacheVC(earliest_evac); + free_CacheEvacuateDocVC(earliest_evac); } } } @@ -138,7 +138,7 @@ CacheEvacuateDocVC::evacuateDocDone(int /* event ATS_UNUSED */, Event * /* e ATS break; } } - return free_CacheVC(this); + return free_CacheEvacuateDocVC(this); } int @@ -190,7 +190,7 @@ CacheEvacuateDocVC::evacuateReadHead(int /* event ATS_UNUSED */, Event * /* e AT // the whole document has been evacuated. Insert the directory // entry in the directory. dir_lookaside_fixup(&earliest_key, this->stripe); - return free_CacheVC(this); + return free_CacheEvacuateDocVC(this); } return EVENT_CONT; Lcollision: @@ -203,5 +203,5 @@ CacheEvacuateDocVC::evacuateReadHead(int /* event ATS_UNUSED */, Event * /* e AT } Ldone: dir_lookaside_remove(&earliest_key, this->stripe); - return free_CacheVC(this); + return free_CacheEvacuateDocVC(this); } diff --git a/src/iocore/cache/CacheWrite.cc b/src/iocore/cache/CacheWrite.cc index c14c6847295..c815c8d85d7 100644 --- a/src/iocore/cache/CacheWrite.cc +++ b/src/iocore/cache/CacheWrite.cc @@ -587,7 +587,7 @@ Stripe::evacuateDocReadDone(int event, Event *e) } return evacuateWrite(doc_evacuator, event, e); Ldone: - free_CacheVC(doc_evacuator); + free_CacheEvacuateDocVC(doc_evacuator); doc_evacuator = nullptr; return aggWrite(event, e); } diff --git a/src/iocore/cache/P_CacheInternal.h b/src/iocore/cache/P_CacheInternal.h index 74f6f7571cf..21e00b9145d 100644 --- a/src/iocore/cache/P_CacheInternal.h +++ b/src/iocore/cache/P_CacheInternal.h @@ -143,8 +143,9 @@ struct CacheRemoveCont : public Continuation { }; // Global Data -extern ClassAllocator cacheVConnectionAllocator; -extern CacheSync *cacheDirSync; +extern ClassAllocator cacheVConnectionAllocator; +extern ClassAllocator cacheEvacuateDocVConnectionAllocator; +extern CacheSync *cacheDirSync; // Function Prototypes int cache_write(CacheVC *, CacheHTTPInfoVector *); int get_alternate_index(CacheHTTPInfoVector *cache_vector, CacheKey key); @@ -170,7 +171,7 @@ new_CacheVC(Continuation *cont) } inline int -free_CacheVC(CacheVC *cont) +free_CacheVCCommon(CacheVC *cont) { static DbgCtl dbg_ctl{"cache_free"}; Dbg(dbg_ctl, "free %p", cont); @@ -219,10 +220,25 @@ free_CacheVC(CacheVC *cont) #ifdef DEBUG SET_CONTINUATION_HANDLER(cont, &CacheVC::dead); #endif + return EVENT_DONE; +} + +inline int +free_CacheVC(CacheVC *cont) +{ + free_CacheVCCommon(cont); THREAD_FREE(cont, cacheVConnectionAllocator, this_thread()); return EVENT_DONE; } +inline int +free_CacheEvacuateDocVC(CacheEvacuateDocVC *cont) +{ + free_CacheVCCommon(cont); + THREAD_FREE(cont, cacheEvacuateDocVConnectionAllocator, this_thread()); + return EVENT_DONE; +} + inline int CacheVC::calluser(int event) {