From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 12C8810E24E for ; Tue, 8 Nov 2022 10:07:41 +0000 (UTC) From: Petri Latvala To: igt-dev@lists.freedesktop.org Date: Tue, 8 Nov 2022 12:07:29 +0200 Message-Id: <20221108100733.2378106-2-petri.latvala@intel.com> In-Reply-To: <20221108100733.2378106-1-petri.latvala@intel.com> References: <20221108100733.2378106-1-petri.latvala@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [PATCH i-g-t v2 2/6] igt_core: Split too long log lines when sending to runner with comms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Petri Latvala Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: Especially with file dumps a single log packet could exceed the max size of a UNIX datagram. Split too long log chunks instead. v2: Use while loop instead of recursion (Kamil). Signed-off-by: Petri Latvala Cc: Arkadiusz Hiler Cc: Kamil Konieczny --- lib/igt_core.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/igt_core.c b/lib/igt_core.c index 3941c528..cab5f860 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -457,6 +457,27 @@ static void _igt_log_buffer_reset(void) pthread_mutex_unlock(&log_buffer_mutex); } +static void _log_to_runner_split(int stream, const char *str) +{ + size_t limit = 4096; + char *buf = NULL; + + while (strlen(str) > limit) { + if (!buf) + buf = malloc(limit + 1); + + strncpy(buf, str, limit); + buf[limit] = '\0'; + + send_to_runner(runnerpacket_log(stream, buf)); + + str += limit; + } + + send_to_runner(runnerpacket_log(stream, str)); + free(buf); +} + __attribute__((format(printf, 2, 3))) static void _log_line_fprintf(FILE* stream, const char *format, ...) { @@ -467,7 +488,7 @@ static void _log_line_fprintf(FILE* stream, const char *format, ...) if (runner_connected()) { vasprintf(&str, format, ap); - send_to_runner(runnerpacket_log(fileno(stream), str)); + _log_to_runner_split(fileno(stream), str); free(str); } else { vfprintf(stream, format, ap); -- 2.30.2