{
struct reader_logger *const reader = (struct reader_logger *) _reader;
assert(reader);
-
- struct dlogutil_entry_with_msg entry;
- static char buffer[sizeof entry + 1];
- buffer[sizeof buffer - 1] = '\0';
- struct android_logger_entry *const ale = (struct android_logger_entry *) buffer;
+ struct android_logger_entry *const ale = (struct android_logger_entry *) reader->read_buffer;
/* The devices for the Android Logger only return one log per read().
* So using an 'if' here would be wasteful and, more importantly, too slow in the case where other logs come in.
* starvation under heavy load. */
int max_loop_iterations = g_backend.logger_device_throttling[reader->buf_id];
while (max_loop_iterations--) {
- int r = TEMP_FAILURE_RETRY(read(reader->common.fd_entity_source.fd, buffer, sizeof buffer - 1));
+ int r = TEMP_FAILURE_RETRY(read(reader->common.fd_entity_source.fd, reader->read_buffer, sizeof reader->read_buffer - 1));
if (r == 0)
break;
else if (r == -1) {
continue;
}
}
+ reader->read_buffer[r] = '\0';
- buffer[r] = '\0';
+ struct dlogutil_entry_with_msg entry;
parse_androidlogger_message(ale, &entry.header, r);
add_recv_timestamp(&entry.header, time);
struct reader_common common;
log_id_t buf_id;
int skip_count;
+
+ /* This should probably be sizeof raw Android Logger entry
+ * as opposed to the processed dlogutil entry (with msg). */
+ char read_buffer[sizeof (struct dlogutil_entry_with_msg) + sizeof '\0'];
};
int reader_logger_init(struct reader_logger **reader, log_id_t buf_id, struct logger *server, bool skip);