+ ++loopKeepAliveCount_;
+ } else {
+ ++loopKeepAliveCountAtomic_;
+ }
+ return makeKeepAlive();
+ }
+
+ bool inRunningEventBaseThread() const {
+ return evb_.inRunningEventBaseThread();
+ }
+
+ protected:
+ void keepAliveRelease() override {
+ DCHECK(getEventBase().inRunningEventBaseThread());
+ if (loopKeepAliveCountAtomic_.load()) {
+ loopKeepAliveCount_ += loopKeepAliveCountAtomic_.exchange(0);
+ }
+ DCHECK(loopKeepAliveCount_ > 0);
+ if (--loopKeepAliveCount_ == 0) {
+ destroyImpl();