Merge "logd: add locks around ~SerializedFlushToState" am: 1bacb2c389
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1449535 Change-Id: I54186d82ba2603a8076ff6714a8f2f59a330643a
This commit is contained in:
commit
d5ed093bc0
5 changed files with 14 additions and 1 deletions
|
|
@ -19,6 +19,7 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include <log/log.h>
|
#include <log/log.h>
|
||||||
#include <log/log_read.h>
|
#include <log/log_read.h>
|
||||||
|
|
@ -62,6 +63,7 @@ class LogBuffer {
|
||||||
const char* msg, uint16_t len) = 0;
|
const char* msg, uint16_t len) = 0;
|
||||||
|
|
||||||
virtual std::unique_ptr<FlushToState> CreateFlushToState(uint64_t start, LogMask log_mask) = 0;
|
virtual std::unique_ptr<FlushToState> CreateFlushToState(uint64_t start, LogMask log_mask) = 0;
|
||||||
|
virtual void DeleteFlushToState(std::unique_ptr<FlushToState>) {}
|
||||||
virtual bool FlushTo(
|
virtual bool FlushTo(
|
||||||
LogWriter* writer, FlushToState& state,
|
LogWriter* writer, FlushToState& state,
|
||||||
const std::function<FilterResult(log_id_t log_id, pid_t pid, uint64_t sequence,
|
const std::function<FilterResult(log_id_t log_id, pid_t pid, uint64_t sequence,
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ void LogReaderThread::ThreadFunction() {
|
||||||
[this](log_id_t log_id, pid_t pid, uint64_t sequence, log_time realtime) {
|
[this](log_id_t log_id, pid_t pid, uint64_t sequence, log_time realtime) {
|
||||||
return FilterFirstPass(log_id, pid, sequence, realtime);
|
return FilterFirstPass(log_id, pid, sequence, realtime);
|
||||||
});
|
});
|
||||||
|
log_buffer_->DeleteFlushToState(std::move(first_pass_state));
|
||||||
}
|
}
|
||||||
bool flush_success = log_buffer_->FlushTo(
|
bool flush_success = log_buffer_->FlushTo(
|
||||||
writer_.get(), *flush_to_state_,
|
writer_.get(), *flush_to_state_,
|
||||||
|
|
@ -105,6 +106,10 @@ void LogReaderThread::ThreadFunction() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lock.unlock();
|
||||||
|
log_buffer_->DeleteFlushToState(std::move(flush_to_state_));
|
||||||
|
lock.lock();
|
||||||
|
|
||||||
writer_->Release();
|
writer_->Release();
|
||||||
|
|
||||||
auto& log_reader_threads = reader_list_->reader_threads();
|
auto& log_reader_threads = reader_list_->reader_threads();
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ class LogReaderThread {
|
||||||
|
|
||||||
bool IsWatching(log_id_t id) const { return flush_to_state_->log_mask() & (1 << id); }
|
bool IsWatching(log_id_t id) const { return flush_to_state_->log_mask() & (1 << id); }
|
||||||
bool IsWatchingMultiple(LogMask log_mask) const {
|
bool IsWatchingMultiple(LogMask log_mask) const {
|
||||||
return flush_to_state_->log_mask() & log_mask;
|
return flush_to_state_ && flush_to_state_->log_mask() & log_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string name() const { return writer_->name(); }
|
std::string name() const { return writer_->name(); }
|
||||||
|
|
|
||||||
|
|
@ -201,6 +201,11 @@ std::unique_ptr<FlushToState> SerializedLogBuffer::CreateFlushToState(uint64_t s
|
||||||
return std::make_unique<SerializedFlushToState>(start, log_mask);
|
return std::make_unique<SerializedFlushToState>(start, log_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SerializedLogBuffer::DeleteFlushToState(std::unique_ptr<FlushToState> state) {
|
||||||
|
auto lock = std::unique_lock{lock_};
|
||||||
|
state.reset();
|
||||||
|
}
|
||||||
|
|
||||||
bool SerializedLogBuffer::FlushTo(
|
bool SerializedLogBuffer::FlushTo(
|
||||||
LogWriter* writer, FlushToState& abstract_state,
|
LogWriter* writer, FlushToState& abstract_state,
|
||||||
const std::function<FilterResult(log_id_t log_id, pid_t pid, uint64_t sequence,
|
const std::function<FilterResult(log_id_t log_id, pid_t pid, uint64_t sequence,
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ class SerializedLogBuffer final : public LogBuffer {
|
||||||
int Log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, pid_t tid, const char* msg,
|
int Log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, pid_t tid, const char* msg,
|
||||||
uint16_t len) override;
|
uint16_t len) override;
|
||||||
std::unique_ptr<FlushToState> CreateFlushToState(uint64_t start, LogMask log_mask) override;
|
std::unique_ptr<FlushToState> CreateFlushToState(uint64_t start, LogMask log_mask) override;
|
||||||
|
void DeleteFlushToState(std::unique_ptr<FlushToState> state) override;
|
||||||
bool FlushTo(LogWriter* writer, FlushToState& state,
|
bool FlushTo(LogWriter* writer, FlushToState& state,
|
||||||
const std::function<FilterResult(log_id_t log_id, pid_t pid, uint64_t sequence,
|
const std::function<FilterResult(log_id_t log_id, pid_t pid, uint64_t sequence,
|
||||||
log_time realtime)>& filter) override;
|
log_time realtime)>& filter) override;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue