From: Michal Sojka Date: Fri, 3 Dec 2010 16:53:05 +0000 (+0100) Subject: Attempt to ignore ENOBUFS error X-Git-Tag: fix-allnoconfig~271 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/commitdiff_plain/481e40ab64b66837af06aaefb14a2d8b45c01530?ds=sidebyside Attempt to ignore ENOBUFS error This is not sucessfull, as the CPU is 100% loaded and the machine is unresponsible (we have too high priority). --- diff --git a/latester/latester.c b/latester/latester.c index 9f0a466..b3f2002 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -316,6 +316,28 @@ int init_ftrace() #endif /* FTRACE */ } +static inline void trace_on() +{ + if (trace_fd >= 0) + write(trace_fd, "1", 1); +} + +static inline void trace_off(int ret) +{ + if (marker_fd >= 0) { + char marker[100]; + sprintf(marker, "write returned %d\n", ret); + write(marker_fd, marker, strlen(marker)); + } + if (trace_fd >= 0) + write(trace_fd, "0", 1); +} + +void msg_info_free(struct msg_info *mi) +{ + mi->id = -1; +} + int send_frame(int socket) { struct can_frame frame; @@ -350,22 +372,13 @@ int send_frame(int socket) get_tstamp(&mi->ts_sent); mi->sent = frame; - if (trace_fd >= 0) - write(trace_fd, "1", 1); + trace_on(); ret = write(socket, &frame, sizeof(frame)); - if (marker_fd >= 0) { - char marker[100]; - sprintf(marker, "write returned %d\n", ret); - write(marker_fd, marker, strlen(marker)); - } - if (trace_fd >= 0) - write(trace_fd, "0", 1); - return ret; -} + trace_off(ret); -void msg_info_free(struct msg_info *mi) -{ - mi->id = -1; + if (ret == -1) + msg_info_free(mi); + return ret; } static inline void get_next_timeout(struct timespec *timeout) @@ -521,13 +534,19 @@ void *measure_thread(void *arg) set_sched_policy_and_prio(SCHED_FIFO, 99); -#define SEND() \ - do { \ - ret = send_frame(pfd[0].fd); \ - if (ret != sizeof(struct can_frame)) \ - error(1, errno, "send_frame (line %d)", __LINE__); \ - count++; \ - msg_in_progress++; \ +#define SEND() \ + do { \ + ret = send_frame(pfd[0].fd); \ + if (ret != sizeof(struct can_frame)) { \ + if (ret == -1 && errno == ENOBUFS && opt.period_us == 0 && !opt.oneattime) { \ + /* Ignore this error - pfifo_fast qeuue is full */ \ + } else \ + error(1, errno, "send_frame (line %d)", __LINE__); \ + } \ + else { \ + count++; \ + msg_in_progress++; \ + } \ } while (0) if (opt.oneattime) {