Revision: 100365 https://trac.macports.org/changeset/100365 Author: cal@macports.org Date: 2012-12-09 09:15:30 -0800 (Sun, 09 Dec 2012) Log Message: ----------- darwintrace: loop around first recv(2), too Sometimes, I saw "!!! received %zd, but should have been %zd", which means the size of the buffer to be read wasn't read completely in the first call to recv(2). Wrapping this in a loop, too, should fix this. Modified Paths: -------------- trunk/base/src/darwintracelib1.0/darwintrace.c Modified: trunk/base/src/darwintracelib1.0/darwintrace.c =================================================================== --- trunk/base/src/darwintracelib1.0/darwintrace.c 2012-12-09 17:09:47 UTC (rev 100364) +++ trunk/base/src/darwintracelib1.0/darwintrace.c 2012-12-09 17:15:30 UTC (rev 100365) @@ -550,19 +550,21 @@ size_t recv_len = 0, received; char *recv_buf; - ssize_t t; - if (-1 == (t = recv(__darwintrace_fd, &recv_len, sizeof(recv_len), 0))) { - debug_printf("error reading data from socket %d: %s\n", __darwintrace_fd, strerror(errno)); - if (__darwintrace_debug) - fprintf(__darwintrace_debug, "darwintrace: error reading data from socket %d: %s\n", __darwintrace_fd, strerror(errno)); - abort(); + received = 0; + while (received < sizeof(recv_len)) { + ssize_t local_received = recv(__darwintrace_fd, ((char *) &recv_len) + received, sizeof(recv_len) - received, 0); + if (local_received == -1) { + debug_printf("error reading data from socket %d: %s\n", __darwintrace_fd, strerror(errno)); + if (__darwintrace_debug) + fprintf(__darwintrace_debug, "darwintrace: error reading data from socket %d: %s\n", __darwintrace_fd, strerror(errno)); + abort(); + } + received += local_received; } - if (t != sizeof(recv_len)) { - debug_printf("!!! received %zd, but should have been %zd\n", t, sizeof(recv_len)); - } if (recv_len == 0) { return 0; } + recv_buf = malloc(recv_len + 1); recv_buf[recv_len] = '\0';
participants (1)
-
cal@macports.org