Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee212d00 authored by Mark Salyzyn's avatar Mark Salyzyn Committed by Gerrit Code Review
Browse files

Merge "logd: liblog: Thread IDs missing from logcat -v thread"

parents 5ad986ab b992d0d7
Loading
Loading
Loading
Loading
+30 −7
Original line number Diff line number Diff line
@@ -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);
@@ -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
}

+3 −3
Original line number Diff line number Diff line
@@ -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);

+2 −1
Original line number Diff line number Diff line
@@ -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,
+4 −2
Original line number Diff line number Diff line
@@ -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) {
@@ -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;

+4 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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