From d5477e66884b92b1ef71210e729009c28932a291 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Mon, 28 Jun 2021 14:54:10 -0700 Subject: [PATCH] Retry on signal. Bug: 192282324 Fixes: 192282324 Test: atest PackageManagerShellCommandTests IncrementalAppErrorStatsTests Change-Id: I96708ca93bc91a321503d60d6737f3afdfeee998 --- ...droid_server_pm_PackageManagerShellCommandDataLoader.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp b/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp index f439777e0c7aa..7513512406e89 100644 --- a/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp +++ b/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp @@ -133,8 +133,12 @@ static bool sendRequest(int fd, RequestType requestType, FileIdx fileIdx = -1, static int waitForDataOrSignal(int fd, int event_fd) { struct pollfd pfds[2] = {{fd, POLLIN, 0}, {event_fd, POLLIN, 0}}; - // Wait indefinitely until either data is ready or stop signal is received + // Wait until either data is ready or stop signal is received int res = poll(pfds, 2, PollTimeoutMs); + if (res == -1 && errno == EINTR) { + // Treat it the same as timeout and allow the caller to retry. + return 0; + } if (res <= 0) { return res; }