Ensure locked Perfetto handle is non-null.
Although the time between when Trace starts and GetDataSourceLocked is called is small, it's still possible for the handle to be invalidated between those two points in time. Check validity prior to use. Test: atest libnetworkstats_test bug: 289476598 Change-Id: Ie4b3d65178e6ca24382efde3f38162f332144e81
This commit is contained in:
parent
8abd1be521
commit
20dc5a0ef8
1 changed files with 8 additions and 1 deletions
|
|
@ -119,7 +119,14 @@ NetworkTracePoller NetworkTraceHandler::sPoller(
|
|||
// the session and delegates writing. The corresponding handler will write
|
||||
// with the setting specified in the trace config.
|
||||
NetworkTraceHandler::Trace([&](NetworkTraceHandler::TraceContext ctx) {
|
||||
ctx.GetDataSourceLocked()->Write(packets, ctx);
|
||||
perfetto::LockedHandle<NetworkTraceHandler> handle =
|
||||
ctx.GetDataSourceLocked();
|
||||
// The underlying handle can be invalidated between when Trace starts
|
||||
// and GetDataSourceLocked is called, but not while the LockedHandle
|
||||
// exists and holds the lock. Check validity prior to use.
|
||||
if (handle.valid()) {
|
||||
handle->Write(packets, ctx);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue