Clean codes of logm
authorAhreum Jeong <ahreum.jeong@samsung.com>
Thu, 13 Jul 2017 04:27:18 +0000 (13:27 +0900)
committerAhreum Jeong <ahreum.jeong@samsung.com>
Thu, 20 Jul 2017 05:21:53 +0000 (14:21 +0900)
os/logm/logm.c
os/logm/logm.h
os/logm/logm_process.c

index 01a1b61..24ba3a8 100644 (file)
 
 int g_logm_head;
 int g_logm_tail;
-int g_logm_available;
-int g_logm_enqueued_count;
 int g_logm_dropmsg_count;
 int g_logm_overflow_offset;
 
 static void logm_putc(FAR struct lib_outstream_s *this, int ch)
 {
-       if (this->nput < g_logm_available - 1) {
+       if ((g_logm_tail + this->nput + 1) % logm_bufsize != g_logm_head) {
                g_logm_rsvbuf[(g_logm_tail + this->nput++) % logm_bufsize] = ch;
        }
 }
 
-static void logm_initstream(FAR struct lib_outstream_s *outstream)
+static void logm_outstream(FAR struct lib_outstream_s *outstream)
 {
        outstream->put = logm_putc;
 #ifdef CONFIG_STDIO_LINEBUFFER
@@ -70,16 +68,8 @@ int logm_internal(int priority, const char *fmt, va_list ap)
                        return 0;
                }
 
-               if (g_logm_available <= 0) {
-                       LOGM_STATUS_SET(LOGM_BUFFER_OVERFLOW);
-                       g_logm_dropmsg_count = 1;
-                       g_logm_overflow_offset = g_logm_tail;
-                       irqrestore(flags);
-                       return 0;
-               }
-
                /*  Initializes a stream for use with logm buffer */
-               logm_initstream(&strm);
+               logm_outstream(&strm);
 
 #ifdef CONFIG_LOGM_TIMESTAMP
                /* Get the current time and prepend timestamp to message */
@@ -88,12 +78,13 @@ int logm_internal(int priority, const char *fmt, va_list ap)
                }
 #endif
                ret = lib_vsprintf(&strm, fmt, ap);
-               g_logm_rsvbuf[(g_logm_tail + ret) % logm_bufsize] = '\0';
+               g_logm_tail = (g_logm_tail + ret) % logm_bufsize;
 
-               /* set g_logm_tail for next entered message */
-               g_logm_tail = (g_logm_tail + ret + 1) % logm_bufsize;
-               g_logm_available -= (ret + 1);
-               g_logm_enqueued_count++;
+               if ((g_logm_tail + 1) % logm_bufsize == g_logm_head) {
+                       LOGM_STATUS_SET(LOGM_BUFFER_OVERFLOW);
+                       g_logm_dropmsg_count = 1;
+                       g_logm_overflow_offset = g_logm_tail;
+               }
 
                irqrestore(flags);
        } else {
index 46811b7..f36711d 100644 (file)
@@ -67,8 +67,6 @@ extern "C" {
 
 EXTERN int g_logm_head;
 EXTERN int g_logm_tail;
-EXTERN int g_logm_available;
-EXTERN int g_logm_enqueued_count;
 EXTERN int g_logm_overflow_offset;
 EXTERN int g_logm_dropmsg_count;
 EXTERN char * g_logm_rsvbuf;
index f9ebbc8..0bbbeb9 100644 (file)
@@ -52,8 +52,6 @@ static int logm_change_bufsize(int buflen)
        g_logm_head = 0;
        g_logm_tail = 0;
        logm_bufsize = buflen;
-       g_logm_available = buflen;
-       g_logm_enqueued_count = 0;
        g_logm_dropmsg_count = 0;
        g_logm_overflow_offset = -1;
 
@@ -64,7 +62,6 @@ static int logm_change_bufsize(int buflen)
 
 int logm_task(int argc, char *argv[])
 {
-       int ret = 0;
        irqstate_t flags;
 
        g_logm_rsvbuf = (char *)malloc(logm_bufsize);
@@ -72,27 +69,18 @@ int logm_task(int argc, char *argv[])
 
        /* Now logm is ready */
        LOGM_STATUS_SET(LOGM_READY);
-       g_logm_available = logm_bufsize;
 
 #ifdef CONFIG_LOGM_TEST
        logmtest_init();
 #endif
 
        while (1) {
-               while (g_logm_enqueued_count > 0) {
-                       ret = 0;
-                       while (*(g_logm_rsvbuf + (g_logm_head + ret) % logm_bufsize)) {
-                               fputc(g_logm_rsvbuf[(g_logm_head + ret++) % logm_bufsize], stdout);
-                       }
-                       g_logm_head = (g_logm_head + ret + 1) % logm_bufsize;
-                       g_logm_available += (ret + 1);
-
-                       g_logm_enqueued_count--;
-
+               while (g_logm_head != g_logm_tail) {
+                       fputc(g_logm_rsvbuf[g_logm_head], stdout);
+                       g_logm_head = (g_logm_head + 1) % logm_bufsize;
                        if (LOGM_STATUS(LOGM_BUFFER_OVERFLOW)) {
                                LOGM_STATUS_CLEAR(LOGM_BUFFER_OVERFLOW);
                        }
-
                        if (g_logm_overflow_offset >= 0 && g_logm_overflow_offset == g_logm_head) {
                                fprintf(stdout, "\n[LOGM BUFFER OVERFLOW] %d messages are dropped\n", g_logm_dropmsg_count);
                                g_logm_overflow_offset = -1;