Hi cephers, I have a question。 in class RGWMetaSyncShardCR boost::intrusive_ptr<RGWContinuousLeaseCR> lease_cr; lease_cr Reference count added 2 times the one is lease_cr.reset(new RGWContinuousLeaseCR(....));the other is lease_stack.reset(spawn(lease_cr.get(), false)); but lease_cr Reference count subtracted 1 times That is op->put() when op done .So I want to know where the other op - > put is? I add assert() in RGWContinuousLeaseCR Deconstruction find stack: 1: (()+0x5c9562) [0x53f4562] 2: (()+0xf370) [0xf182370] 3: (gsignal()+0x37) [0xfae71d7] 4: (abort()+0x148) [0xfae88c8] 5: (()+0x2e146) [0xfae0146] 6: (()+0x2e1f2) [0xfae01f2] 7: (RGWContinuousLeaseCR::~RGWContinuousLeaseCR()+0x7e) [0x513b69e] 8: (RGWContinuousLeaseCR::~RGWContinuousLeaseCR()+0x9) [0x513b739] 9: (RefCountedObject::put()+0xe5) [0x5139185] 10: (RGWMetaSyncShardCR::~RGWMetaSyncShardCR()+0x95) [0x51e1775] 11: (RGWMetaSyncShardCR::~RGWMetaSyncShardCR()+0x9) [0x51e18d9] 12: (RefCountedObject::put()+0xe5) [0x5139185] 13: (RGWBackoffControlCR::operate()+0x115) [0x51cc715] 14: (RGWCoroutinesStack::operate(RGWCoroutinesEnv*)+0x73) [0x5134943] 15: (RGWCoroutinesManager::run(std::list<RGWCoroutinesStack*, std::allocator<RGWCoroutinesStack*> >&)+0x3bc) [0x513788c] 16: (RGWCoroutinesManager::run(RGWCoroutine*)+0x5d) [0x513840d] 17: (RGWRemoteMetaLog::run_sync()+0x108a) [0x51d3f2a] 18: (RGWMetaSyncProcessorThread::process()+0xd) [0x52d662d] 19: (RGWRadosThread::Worker::entry()+0x11b) [0x52787bb] 20: (()+0x7dc5) [0xf17adc5] 21: (clone()+0x6d) [0xfba973d] I don't understand it ,because ~RGWMetaSyncShardCR() doesn't call RGWContinuousLeaseCR->put(). code: ~RGWMetaSyncShardCR() override { delete marker_tracker; if (lease_cr) { lease_cr->abort(); } } can you help me! Thanks.