Loading liblog/logd_write.c +30 −7 Original line number Diff line number Diff line Loading @@ -111,11 +111,34 @@ static int __write_to_log_kernel(log_id_t log_id, struct iovec *vec, size_t nr) */ return 0; } struct iovec newVec[nr + 2]; /* * struct { * // what we provide * typeof_log_id_t log_id; * u16 tid; * log_time realtime; * // caller provides * union { * struct { * char prio; * char payload[]; * } string; * struct { * uint32_t tag * char payload[]; * } binary; * }; * }; */ static const unsigned header_length = 3; struct iovec newVec[nr + header_length]; typeof_log_id_t log_id_buf = log_id; uint16_t tid = gettid(); newVec[0].iov_base = (unsigned char *) &log_id_buf; newVec[0].iov_len = sizeof_log_id_t; newVec[1].iov_base = (unsigned char *) &tid; newVec[1].iov_len = sizeof(tid); struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); Loading @@ -123,17 +146,17 @@ static int __write_to_log_kernel(log_id_t log_id, struct iovec *vec, size_t nr) realtime_ts.tv_sec = ts.tv_sec; realtime_ts.tv_nsec = ts.tv_nsec; newVec[1].iov_base = (unsigned char *) &realtime_ts; newVec[1].iov_len = sizeof(log_time); newVec[2].iov_base = (unsigned char *) &realtime_ts; newVec[2].iov_len = sizeof(log_time); size_t i; for (i = 2; i < nr + 2; i++) { newVec[i].iov_base = vec[i-2].iov_base; newVec[i].iov_len = vec[i-2].iov_len; for (i = header_length; i < nr + header_length; i++) { newVec[i].iov_base = vec[i-header_length].iov_base; newVec[i].iov_len = vec[i-header_length].iov_len; } /* The write below could be lost, but will never block. */ return writev(logd_fd, newVec, nr + 2); return writev(logd_fd, newVec, nr + header_length); #endif } Loading logd/LogBuffer.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -45,13 +45,13 @@ LogBuffer::LogBuffer(LastLogTimes *times) } void LogBuffer::log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, const char *msg, unsigned short len) { uid_t uid, pid_t pid, pid_t tid, const char *msg, unsigned short len) { if ((log_id >= LOG_ID_MAX) || (log_id < 0)) { return; } LogBufferElement *elem = new LogBufferElement(log_id, realtime, uid, pid, msg, len); uid, pid, tid, msg, len); pthread_mutex_lock(&mLogElementsLock); Loading logd/LogBuffer.h +2 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,8 @@ public: LogBuffer(LastLogTimes *times); void log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, const char *msg, unsigned short len); uid_t uid, pid_t pid, pid_t tid, const char *msg, unsigned short len); log_time flushTo(SocketClient *writer, const log_time start, bool privileged, bool (*filter)(const LogBufferElement *element, void *arg) = NULL, Loading logd/LogBufferElement.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -27,11 +27,12 @@ const log_time LogBufferElement::FLUSH_ERROR((uint32_t)0, (uint32_t)0); LogBufferElement::LogBufferElement(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, const char *msg, unsigned short len) uid_t uid, pid_t pid, pid_t tid, const char *msg, unsigned short len) : mLogId(log_id) , mUid(uid) , mPid(pid) , mTid(tid) , mMsgLen(len) , mMonotonicTime(CLOCK_MONOTONIC) , mRealTime(realtime) { Loading @@ -50,6 +51,7 @@ log_time LogBufferElement::flushTo(SocketClient *reader) { entry.len = mMsgLen; entry.lid = mLogId; entry.pid = mPid; entry.tid = mTid; entry.sec = mRealTime.tv_sec; entry.nsec = mRealTime.tv_nsec; Loading logd/LogBufferElement.h +4 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ class LogBufferElement { const log_id_t mLogId; const uid_t mUid; const pid_t mPid; const pid_t mTid; char *mMsg; const unsigned short mMsgLen; const log_time mMonotonicTime; Loading @@ -33,12 +34,14 @@ class LogBufferElement { public: LogBufferElement(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, const char *msg, unsigned short len); uid_t uid, pid_t pid, pid_t tid, const char *msg, unsigned short len); virtual ~LogBufferElement(); log_id_t getLogId() const { return mLogId; } uid_t getUid(void) const { return mUid; } pid_t getPid(void) const { return mPid; } pid_t getTid(void) const { return mTid; } unsigned short getMsgLen() const { return mMsgLen; } log_time getMonotonicTime(void) const { return mMonotonicTime; } log_time getRealTime(void) const { return mRealTime; } Loading Loading
liblog/logd_write.c +30 −7 Original line number Diff line number Diff line Loading @@ -111,11 +111,34 @@ static int __write_to_log_kernel(log_id_t log_id, struct iovec *vec, size_t nr) */ return 0; } struct iovec newVec[nr + 2]; /* * struct { * // what we provide * typeof_log_id_t log_id; * u16 tid; * log_time realtime; * // caller provides * union { * struct { * char prio; * char payload[]; * } string; * struct { * uint32_t tag * char payload[]; * } binary; * }; * }; */ static const unsigned header_length = 3; struct iovec newVec[nr + header_length]; typeof_log_id_t log_id_buf = log_id; uint16_t tid = gettid(); newVec[0].iov_base = (unsigned char *) &log_id_buf; newVec[0].iov_len = sizeof_log_id_t; newVec[1].iov_base = (unsigned char *) &tid; newVec[1].iov_len = sizeof(tid); struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); Loading @@ -123,17 +146,17 @@ static int __write_to_log_kernel(log_id_t log_id, struct iovec *vec, size_t nr) realtime_ts.tv_sec = ts.tv_sec; realtime_ts.tv_nsec = ts.tv_nsec; newVec[1].iov_base = (unsigned char *) &realtime_ts; newVec[1].iov_len = sizeof(log_time); newVec[2].iov_base = (unsigned char *) &realtime_ts; newVec[2].iov_len = sizeof(log_time); size_t i; for (i = 2; i < nr + 2; i++) { newVec[i].iov_base = vec[i-2].iov_base; newVec[i].iov_len = vec[i-2].iov_len; for (i = header_length; i < nr + header_length; i++) { newVec[i].iov_base = vec[i-header_length].iov_base; newVec[i].iov_len = vec[i-header_length].iov_len; } /* The write below could be lost, but will never block. */ return writev(logd_fd, newVec, nr + 2); return writev(logd_fd, newVec, nr + header_length); #endif } Loading
logd/LogBuffer.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -45,13 +45,13 @@ LogBuffer::LogBuffer(LastLogTimes *times) } void LogBuffer::log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, const char *msg, unsigned short len) { uid_t uid, pid_t pid, pid_t tid, const char *msg, unsigned short len) { if ((log_id >= LOG_ID_MAX) || (log_id < 0)) { return; } LogBufferElement *elem = new LogBufferElement(log_id, realtime, uid, pid, msg, len); uid, pid, tid, msg, len); pthread_mutex_lock(&mLogElementsLock); Loading
logd/LogBuffer.h +2 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,8 @@ public: LogBuffer(LastLogTimes *times); void log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, const char *msg, unsigned short len); uid_t uid, pid_t pid, pid_t tid, const char *msg, unsigned short len); log_time flushTo(SocketClient *writer, const log_time start, bool privileged, bool (*filter)(const LogBufferElement *element, void *arg) = NULL, Loading
logd/LogBufferElement.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -27,11 +27,12 @@ const log_time LogBufferElement::FLUSH_ERROR((uint32_t)0, (uint32_t)0); LogBufferElement::LogBufferElement(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, const char *msg, unsigned short len) uid_t uid, pid_t pid, pid_t tid, const char *msg, unsigned short len) : mLogId(log_id) , mUid(uid) , mPid(pid) , mTid(tid) , mMsgLen(len) , mMonotonicTime(CLOCK_MONOTONIC) , mRealTime(realtime) { Loading @@ -50,6 +51,7 @@ log_time LogBufferElement::flushTo(SocketClient *reader) { entry.len = mMsgLen; entry.lid = mLogId; entry.pid = mPid; entry.tid = mTid; entry.sec = mRealTime.tv_sec; entry.nsec = mRealTime.tv_nsec; Loading
logd/LogBufferElement.h +4 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ class LogBufferElement { const log_id_t mLogId; const uid_t mUid; const pid_t mPid; const pid_t mTid; char *mMsg; const unsigned short mMsgLen; const log_time mMonotonicTime; Loading @@ -33,12 +34,14 @@ class LogBufferElement { public: LogBufferElement(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, const char *msg, unsigned short len); uid_t uid, pid_t pid, pid_t tid, const char *msg, unsigned short len); virtual ~LogBufferElement(); log_id_t getLogId() const { return mLogId; } uid_t getUid(void) const { return mUid; } pid_t getPid(void) const { return mPid; } pid_t getTid(void) const { return mTid; } unsigned short getMsgLen() const { return mMsgLen; } log_time getMonotonicTime(void) const { return mMonotonicTime; } log_time getRealTime(void) const { return mRealTime; } Loading