DBG("App died while being traced");
finish_consuming_dead_subbuffer(instance->callbacks, buf);
break;
+ } else if (read_result == -1 && errno == EINTR) {
+ continue;
}
if(instance->callbacks->on_read_subbuffer)
struct sockaddr_un addr;
+socket_again:
result = fd = socket(PF_UNIX, SOCK_STREAM, 0);
if(result == -1) {
+ if (errno == EINTR)
+ goto socket_again;
PERROR("socket");
return 1;
}
strncpy(addr.sun_path, instance->sock_path, UNIX_PATH_MAX);
addr.sun_path[UNIX_PATH_MAX-1] = '\0';
+connect_again:
result = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
if(result == -1) {
+ if (errno == EINTR)
+ goto connect_again;
PERROR("connect");
}
- while(bytes != sizeof(msg))
- bytes += send(fd, msg, sizeof(msg), 0);
+ while(bytes != sizeof(msg)) {
+ int inc = send(fd, msg, sizeof(msg), 0);
+ if (inc < 0 && errno != EINTR)
+ break;
+ else
+ bytes += inc;
+ }
close(fd);
trace_path, buf->pid, buf->pidunique, buf->name);
return 1;
}
+again:
result = fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 00600);
+ if (result == -1 && errno == EINTR)
+ goto again;
+
if(result == -1) {
PERROR("open");
ERR("failed opening trace file %s", tmp);
int on_close_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf)
{
struct buffer_info_local *buf_local = buf->user_data;
- int result = close(buf_local->file_fd);
+ int result;
+
+again:
+ result = close(buf_local->file_fd);
+ if (result == -1 && errno == EINTR)
+ goto again;
free(buf_local);
if(result == -1) {
PERROR("close");