Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a8ea8c6 authored by Andreas Gampe's avatar Andreas Gampe
Browse files

Frameworks: Fix system server profiling

Avoid a race to close the profiling file descriptor.

Bug: 74883338
Test: m
Test: am profile start `pid system_server` /data/local/tmp/test.trace && sleep 5s && am profile stop `pid system_server` && adb pull /data/local/tmp/test.trace && [[ $(find test.trace -size +1K) ]] && echo Success
Change-Id: Ib506ce38ac1ac7c0b91079ba9b35aca6ae289d22
parent c27ebbaa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -612,7 +612,7 @@ public final class ActivityThread {
                        streamingOutput);
                profiling = true;
            } catch (RuntimeException e) {
                Slog.w(TAG, "Profiling failed on path " + profileFile);
                Slog.w(TAG, "Profiling failed on path " + profileFile, e);
                try {
                    profileFd.close();
                    profileFd = null;
+8 −0
Original line number Diff line number Diff line
@@ -23603,6 +23603,14 @@ public class ActivityManagerService extends IActivityManager.Stub
                    } catch (IOException e) {
                    }
                    mProfilerInfo.profileFd = null;
                    if (proc.pid == MY_PID) {
                        // When profiling the system server itself, avoid closing the file
                        // descriptor, as profilerControl will not create a copy.
                        // Note: it is also not correct to just set profileFd to null, as the
                        //       whole ProfilerInfo instance is passed down!
                        profilerInfo = null;
                    }
                } else {
                    stopProfilerLocked(proc, profileType);
                    if (profilerInfo != null && profilerInfo.profileFd != null) {