@@ -5941,10 +5941,9 @@ std::string StripChars(const std::string& str,
59415941 const std::string& chars,
59425942 char replacement) {
59435943 std::string res(str);
5944- const char* start = res.c_str();
59455944 const char* remove = chars.c_str();
5946- for (const char* c = strpbrk(start, remove); c; c = strpbrk(c + 1, remove ))
5947- res[static_cast<uintptr_t>(c - start) ] = replacement;
5945+ for (size_t pos = res.find_first_of( remove); pos != std::string::npos; pos = res.find_first_of(remove, pos + 1))
5946+ res[pos ] = replacement;
59485947 return res;
59495948}
59505949
@@ -8806,17 +8805,35 @@ void __attribute__((noreturn)) ChildProcess(ChildProcessArgs* args) {
88068805 close(args->stdin_pipe_rd);
88078806 break;
88088807 case Subprocess::InputMode::kDevNull:
8809- if (dup2(open("/dev/null", O_RDONLY), STDIN_FILENO) == -1)
8810- die("Failed to dup2(STDOUT)");
8808+ int fd = open("/dev/null", O_RDONLY);
8809+ if (fd == -1) {
8810+ die("Failed to open /dev/null");
8811+ }
8812+
8813+ if (dup2(fd, STDIN_FILENO) == -1) {
8814+ close(fd);
8815+ die("Failed to dup2(STDIN)");
8816+ }
8817+
8818+ close(fd);
88118819 break;
88128820 }
88138821
88148822 switch (args->create_args->stdout_mode) {
88158823 case Subprocess::OutputMode::kInherit:
88168824 break;
88178825 case Subprocess::OutputMode::kDevNull: {
8818- if (dup2(open("/dev/null", O_RDWR), STDOUT_FILENO) == -1)
8819- die("Failed to dup2(STDOUT)");
8826+ int fd = open("/dev/null", O_RDWR);
8827+ if (fd == -1) {
8828+ die("Failed to open /dev/null");
8829+ }
8830+
8831+ if (dup2(fd, STDOUT_FILENO) == -1) {
8832+ close(fd);
8833+ die("Failed to dup2(STDOUT)");
8834+ }
8835+
8836+ close(fd);
88208837 break;
88218838 }
88228839 case Subprocess::OutputMode::kBuffer:
@@ -8833,8 +8850,17 @@ void __attribute__((noreturn)) ChildProcess(ChildProcessArgs* args) {
88338850 case Subprocess::OutputMode::kInherit:
88348851 break;
88358852 case Subprocess::OutputMode::kDevNull: {
8836- if (dup2(open("/dev/null", O_RDWR), STDERR_FILENO) == -1)
8837- die("Failed to dup2(STDERR)");
8853+ int fd = open("/dev/null", O_RDWR);
8854+ if (fd == -1) {
8855+ die("Failed to open /dev/null");
8856+ }
8857+
8858+ if (dup2(fd, STDERR_FILENO) == -1) {
8859+ close(fd);
8860+ die("Failed to dup2(STDERR)");
8861+ }
8862+
8863+ close(fd);
88388864 break;
88398865 }
88408866 case Subprocess::OutputMode::kBuffer:
@@ -9123,7 +9149,7 @@ void Subprocess::TryPushStdin() {
91239149void Subprocess::TryReadStdoutAndErr() {
91249150 if (!s_->stdouterr_pipe.rd)
91259151 return;
9126- char buf[4096];
9152+ char buf[4096] = {} ;
91279153 int64_t rsize =
91289154 PERFETTO_EINTR(read(*s_->stdouterr_pipe.rd, buf, sizeof(buf)));
91299155 if (rsize < 0 && errno == EAGAIN)
@@ -46264,8 +46290,8 @@ void TracingMuxerImpl::Shutdown() {
4626446290 PERFETTO_CHECK(!muxer->task_runner_->RunsTasksOnCurrentThread());
4626546291 muxer->DestroyStoppedTraceWritersForCurrentThread();
4626646292
46267- std::unique_ptr<base::TaskRunner> owned_task_runner(
46268- muxer->task_runner_.get() );
46293+ std::unique_ptr<base::TaskRunner> owned_task_runner =
46294+ std::move( muxer->task_runner_);
4626946295 base::WaitableEvent shutdown_done;
4627046296 owned_task_runner->PostTask([muxer, &shutdown_done] {
4627146297 // Check that no consumer session is currently active on any backend.
@@ -51698,6 +51724,7 @@ void TraceBuffer::CopyChunkUntrusted(ProducerID producer_id_trusted,
5169851724 record.writer_id = writer_id;
5169951725 record.num_fragments = num_fragments;
5170051726 record.flags = chunk_flags;
51727+ record.unused_flag = 0;
5170151728 ChunkMeta::Key key(record);
5170251729
5170351730 // Check whether we have already copied the same chunk previously. This may
@@ -51951,6 +51978,7 @@ void TraceBuffer::AddPaddingRecord(size_t size) {
5195151978 PERFETTO_DCHECK(size >= sizeof(ChunkRecord) && size <= ChunkRecord::kMaxSize);
5195251979 ChunkRecord record(size);
5195351980 record.is_padding = 1;
51981+ record.unused_flag = 0;
5195451982 TRACE_BUFFER_DLOG("AddPaddingRecord @ [%lu - %lu] %zu", wptr_ - begin(),
5195551983 uintptr_t(wptr_ - begin()) + size, size);
5195651984 WriteChunkRecord(wptr_, record, nullptr, size - sizeof(ChunkRecord));
@@ -52028,6 +52056,7 @@ TraceBuffer::SequenceIterator TraceBuffer::GetReadIterForSequence(
5202852056 iter.seq_begin = seq_begin;
5202952057 if (seq_begin == index_.end()) {
5203052058 iter.cur = iter.seq_end = index_.end();
52059+ iter.wrapping_id = 0;
5203152060 return iter;
5203252061 }
5203352062
@@ -72184,12 +72213,13 @@ void HostImpl::OnNewIncomingConnection(
7218472213 PERFETTO_DCHECK_THREAD(thread_checker_);
7218572214 std::unique_ptr<ClientConnection> client(new ClientConnection());
7218672215 ClientID client_id = ++last_client_id_;
72187- clients_by_socket_[new_conn.get()] = client.get();
7218872216 client->id = client_id;
7218972217 client->sock = std::move(new_conn);
7219072218 // Watchdog is 30 seconds, so set the socket timeout to 10 seconds.
7219172219 client->sock->SetTxTimeout(10000);
72220+ // Move client into clients_ first, then use the raw pointer for clients_by_socket_
7219272221 clients_[client_id] = std::move(client);
72222+ clients_by_socket_[clients_[client_id]->sock.get()] = clients_[client_id].get();
7219372223}
7219472224
7219572225void HostImpl::OnDataAvailable(base::UnixSocket* sock) {
0 commit comments