[PATCH i-g-t 27/28] full drain of socketfd
Petri Latvala
petri.latvala at intel.com
Mon Mar 22 11:34:19 UTC 2021
---
runner/executor.c | 144 ++++++++++++++++++++++++----------------------
1 file changed, 74 insertions(+), 70 deletions(-)
diff --git a/runner/executor.c b/runner/executor.c
index da874ba0..14138ff7 100644
--- a/runner/executor.c
+++ b/runner/executor.c
@@ -988,85 +988,89 @@ static int monitor_output(pid_t child,
time_last_activity = time_now;
- /* Don't need flags, don't need srcaddr */
- s = read(socketfd, buf, sizeof(buf));
- if (s <= 0) {
- if (s < 0) {
- errf("Error reading from communication socket: %m\n");
- }
+ /* Fully drain everything */
+ while (true) {
+ s = recv(socketfd, buf, sizeof(buf), MSG_DONTWAIT);
- close(socketfd);
- socketfd = -1;
- goto socket_end;
- }
+ if (s < 0) {
+ if (errno == EAGAIN)
+ break;
- packet = (struct runnerpacket *)buf;
- if (s < sizeof(*packet) || s != packet->size) {
- errf("Socket communication error: Received %zd bytes, expected %zd\n",
- s, s >= sizeof(packet->size) ? packet->size : sizeof(*packet));
- close(socketfd);
- socketfd = -1;
- goto socket_end;
- }
+ errf("Error reading from communication socket: %m\n");
- write_packet_with_canary(outputs[_F_SOCKET], packet, settings->sync);
- disk_usage += packet->size;
+ close(socketfd);
+ socketfd = -1;
+ goto socket_end;
+ }
- /*
- * runner sends EXEC itself before executing
- * the test, other types indicate the test
- * really uses socket comms
- */
- if (packet->type != PACKETTYPE_EXEC)
- socket_comms_used = true;
+ packet = (struct runnerpacket *)buf;
+ if (s < sizeof(*packet) || s != packet->size) {
+ errf("Socket communication error: Received %zd bytes, expected %zd\n",
+ s, s >= sizeof(packet->size) ? packet->size : sizeof(*packet));
+ close(socketfd);
+ socketfd = -1;
+ goto socket_end;
+ }
- if (packet->type == PACKETTYPE_SUBTEST_START ||
- packet->type == PACKETTYPE_DYNAMIC_SUBTEST_START)
- time_last_subtest = time_now;
+ write_packet_with_canary(outputs[_F_SOCKET], packet, settings->sync);
+ disk_usage += packet->size;
- if (settings->log_level >= LOG_LEVEL_VERBOSE) {
- runnerpacket_read_helper helper = {};
- const char *time;
+ /*
+ * runner sends EXEC itself before executing
+ * the test, other types indicate the test
+ * really uses socket comms
+ */
+ if (packet->type != PACKETTYPE_EXEC)
+ socket_comms_used = true;
if (packet->type == PACKETTYPE_SUBTEST_START ||
- packet->type == PACKETTYPE_SUBTEST_RESULT ||
- packet->type == PACKETTYPE_DYNAMIC_SUBTEST_START ||
- packet->type == PACKETTYPE_DYNAMIC_SUBTEST_RESULT)
- helper = read_runnerpacket(packet);
-
- switch (helper.type) {
- case PACKETTYPE_SUBTEST_START:
- if (helper.subteststart.name)
- outf("Starting subtest: %s\n", helper.subteststart.name);
- break;
- case PACKETTYPE_SUBTEST_RESULT:
- if (helper.subtestresult.name && helper.subtestresult.result) {
- time = "<unknown>";
- if (helper.subtestresult.timeused)
- time = helper.subtestresult.timeused;
- outf("Subtest %s: %s (%ss)\n",
- helper.subtestresult.name,
- helper.subtestresult.result,
- time);
- }
- break;
- case PACKETTYPE_DYNAMIC_SUBTEST_START:
- if (helper.dynamicsubteststart.name)
- outf("Starting dynamic subtest: %s\n", helper.dynamicsubteststart.name);
- break;
- case PACKETTYPE_DYNAMIC_SUBTEST_RESULT:
- if (helper.dynamicsubtestresult.name && helper.dynamicsubtestresult.result) {
- time = "<unknown>";
- if (helper.dynamicsubtestresult.timeused)
- time = helper.dynamicsubtestresult.timeused;
- outf("Dynamic subtest %s: %s (%ss)\n",
- helper.dynamicsubtestresult.name,
- helper.dynamicsubtestresult.result,
- time);
+ packet->type == PACKETTYPE_DYNAMIC_SUBTEST_START)
+ time_last_subtest = time_now;
+
+ if (settings->log_level >= LOG_LEVEL_VERBOSE) {
+ runnerpacket_read_helper helper = {};
+ const char *time;
+
+ if (packet->type == PACKETTYPE_SUBTEST_START ||
+ packet->type == PACKETTYPE_SUBTEST_RESULT ||
+ packet->type == PACKETTYPE_DYNAMIC_SUBTEST_START ||
+ packet->type == PACKETTYPE_DYNAMIC_SUBTEST_RESULT)
+ helper = read_runnerpacket(packet);
+
+ switch (helper.type) {
+ case PACKETTYPE_SUBTEST_START:
+ if (helper.subteststart.name)
+ outf("Starting subtest: %s\n", helper.subteststart.name);
+ break;
+ case PACKETTYPE_SUBTEST_RESULT:
+ if (helper.subtestresult.name && helper.subtestresult.result) {
+ time = "<unknown>";
+ if (helper.subtestresult.timeused)
+ time = helper.subtestresult.timeused;
+ outf("Subtest %s: %s (%ss)\n",
+ helper.subtestresult.name,
+ helper.subtestresult.result,
+ time);
+ }
+ break;
+ case PACKETTYPE_DYNAMIC_SUBTEST_START:
+ if (helper.dynamicsubteststart.name)
+ outf("Starting dynamic subtest: %s\n", helper.dynamicsubteststart.name);
+ break;
+ case PACKETTYPE_DYNAMIC_SUBTEST_RESULT:
+ if (helper.dynamicsubtestresult.name && helper.dynamicsubtestresult.result) {
+ time = "<unknown>";
+ if (helper.dynamicsubtestresult.timeused)
+ time = helper.dynamicsubtestresult.timeused;
+ outf("Dynamic subtest %s: %s (%ss)\n",
+ helper.dynamicsubtestresult.name,
+ helper.dynamicsubtestresult.result,
+ time);
+ }
+ break;
+ default:
+ break;
}
- break;
- default:
- break;
}
}
}
--
2.29.2
More information about the Intel-gfx-trybot
mailing list