Skip to content

Commit f4e92d8

Browse files
manudhundidaverigby
authored andcommitted
In EventuallyPersistentStore, move stop task funcs to deinitialize() from dtor
In the class EventuallyPersistentStore, after an instance is created, some operations are done to create tasks, etc in the func initialize(). However, these are undone during dtor of the class. This is not always safe as flagged by the thread sanitizer in http://cv.jenkins.couchbase.com/job/ep-engine-threadsanitizer-master/1479/ This commit does the undoing of initialize() stuff in deinitialize() before delete. Change-Id: Ie090fd74b7bad77642666d85969c97ae5001a027 Reviewed-on: http://review.couchbase.org/68974 Tested-by: buildbot <[email protected]> Reviewed-by: Dave Rigby <[email protected]>
1 parent bad7452 commit f4e92d8

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

src/ep.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -560,11 +560,11 @@ bool EventuallyPersistentStore::initialize() {
560560
return true;
561561
}
562562

563-
EventuallyPersistentStore::~EventuallyPersistentStore() {
563+
void EventuallyPersistentStore::deinitialize() {
564564
stopWarmup();
565565
stopBgFetcher();
566-
ExecutorPool::get()->stopTaskGroup(engine.getTaskable().getGID(), NONIO_TASK_IDX,
567-
stats.forceShutdown);
566+
ExecutorPool::get()->stopTaskGroup(engine.getTaskable().getGID(),
567+
NONIO_TASK_IDX, stats.forceShutdown);
568568

569569
ExecutorPool::get()->cancel(statsSnapshotTaskId);
570570

@@ -576,7 +576,9 @@ EventuallyPersistentStore::~EventuallyPersistentStore() {
576576

577577
ExecutorPool::get()->unregisterTaskable(engine.getTaskable(),
578578
stats.forceShutdown);
579+
}
579580

581+
EventuallyPersistentStore::~EventuallyPersistentStore() {
580582
delete [] vb_mutexes;
581583
delete [] schedule_vbstate_persist;
582584
delete [] stats.schedulingHisto;

src/ep.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,18 @@ class EventuallyPersistentStore {
210210
EventuallyPersistentStore(EventuallyPersistentEngine &theEngine);
211211
~EventuallyPersistentStore();
212212

213+
/**
214+
* Start necessary tasks.
215+
* Client calling initialize must also call deinitialize before deleting
216+
* the EventuallyPersistentStore instance
217+
*/
213218
bool initialize();
214219

220+
/**
221+
* Stop tasks started in initialize()
222+
*/
223+
void deinitialize();
224+
215225
/**
216226
* Set an item in the store.
217227
* @param item the item to set

src/ep_engine.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6401,6 +6401,7 @@ ENGINE_ERROR_CODE EventuallyPersistentEngine::sendNotMyVBucketResponse(
64016401
}
64026402

64036403
EventuallyPersistentEngine::~EventuallyPersistentEngine() {
6404+
epstore->deinitialize();
64046405
delete epstore;
64056406
delete workload;
64066407
delete dcpConnMap_;

0 commit comments

Comments
 (0)