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

Commit 039aa7bf authored by Christopher Ferris's avatar Christopher Ferris
Browse files

Fix problem of logd restarting.

If logd restarts, then the old logd connection is no longer valid.
In order to keep working, reset the connection when this situation is
detected.

Bug: 276934420

Test: Ran CtsGwpAsanTestCases then killed logd. Verified that
Test: running the test again displays the warning about the logd
Test: connection and all of the tests pass.
Change-Id: I375ee9a2df50b445e21ef847614644ffa2af1f36
parent 35d5d62d
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.DeadObjectException;
import android.os.Handler;
import android.os.ILogd;
import android.os.Looper;
@@ -514,7 +515,15 @@ public final class LogcatManagerService extends SystemService {
            Slog.d(TAG, "Approving log access: " + request);
        }
        try {
            try {
                getLogdService().approve(request.mUid, request.mGid, request.mPid, request.mFd);
            } catch (DeadObjectException e) {
                // This can happen if logd restarts, so force getting a new connection
                // to logd and try once more.
                Slog.w(TAG, "Logd connection no longer valid while approving, trying once more.");
                mLogdService = null;
                getLogdService().approve(request.mUid, request.mGid, request.mPid, request.mFd);
            }
            Integer activeCount = mActiveLogAccessCount.getOrDefault(client, 0);
            mActiveLogAccessCount.put(client, activeCount + 1);
        } catch (RemoteException e) {
@@ -527,7 +536,15 @@ public final class LogcatManagerService extends SystemService {
            Slog.d(TAG, "Declining log access: " + request);
        }
        try {
            try {
                getLogdService().decline(request.mUid, request.mGid, request.mPid, request.mFd);
            } catch (DeadObjectException e) {
                // This can happen if logd restarts, so force getting a new connection
                // to logd and try once more.
                Slog.w(TAG, "Logd connection no longer valid while declining, trying once more.");
                mLogdService = null;
                getLogdService().decline(request.mUid, request.mGid, request.mPid, request.mFd);
            }
        } catch (RemoteException e) {
            Slog.e(TAG, "Fails to call remote functions", e);
        }