@@ -35,7 +35,7 @@ SpanExporterImpl* SpanExporterImpl::Get() {
3535// Create detached worker thread
3636SpanExporterImpl::SpanExporterImpl (uint32_t buffer_size,
3737 absl::Duration interval)
38- : buffer_size_(buffer_size), interval_(interval), size_( 0 ) {}
38+ : buffer_size_(buffer_size), interval_(interval) {}
3939
4040void SpanExporterImpl::RegisterHandler (
4141 std::unique_ptr<SpanExporter::Handler> handler) {
@@ -50,7 +50,6 @@ void SpanExporterImpl::AddSpan(
5050 const std::shared_ptr<opencensus::trace::SpanImpl>& span_impl) {
5151 absl::MutexLock l (&span_mu_);
5252 spans_.emplace_back (span_impl);
53- size_.fetch_add (1 , std::memory_order_acq_rel);
5453}
5554
5655void SpanExporterImpl::StartExportThread () {
@@ -68,20 +67,19 @@ void SpanExporterImpl::RunWorkerLoop() {
6867 {
6968 absl::MutexLock l (&span_mu_);
7069 // Wait until batch is full or interval time has been exceeded.
71- span_mu_.AwaitWithDeadline (
72- absl::Condition (
73- +[](SpanExporterImpl* ptr) {
74- return ( ptr->size_ . load (std::memory_order_acquire ) >=
75- ptr->buffer_size_ ) ;
76- },
77- this ),
78- next_forced_export_time);
70+ span_mu_.AwaitWithDeadline (absl::Condition (
71+ +[](SpanExporterImpl* ptr) {
72+ ptr-> span_mu_ . AssertHeld ();
73+ return ptr->spans_ . size ( ) >=
74+ ptr->buffer_size_ ;
75+ },
76+ this ),
77+ next_forced_export_time);
7978 next_forced_export_time = absl::Now () + interval_;
8079 if (spans_.empty ()) {
8180 continue ;
8281 }
8382 std::swap (spans_copy_, spans_);
84- size_.store (0 , std::memory_order_release);
8583 }
8684 for (const auto & span : spans_copy_) {
8785 span_data_.emplace_back (span->ToSpanData ());
0 commit comments