Changeset: ceba477d7a3e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ceba477d7a3e
Modified Files:
        tools/merovingian/daemon/handlers.c
        tools/merovingian/daemon/merovingian.c
        tools/merovingian/daemon/multiplex-funnel.c
Branch: Sep2022
Log Message:

Merge with Jan2022 branch.


diffs (106 lines):

diff --git a/tools/merovingian/ChangeLog.Jan2022 
b/tools/merovingian/ChangeLog.Jan2022
--- a/tools/merovingian/ChangeLog.Jan2022
+++ b/tools/merovingian/ChangeLog.Jan2022
@@ -1,3 +1,7 @@
 # ChangeLog file for sql/src/backends/monet5/merovingian
 # This file is updated with mchangelog
 
+* Wed Aug 24 2022 Sjoerd Mullender <sjo...@acm.org>
+- In certain cases a log message was logged over and over again.
+  This has been fixed.
+
diff --git a/tools/merovingian/daemon/handlers.c 
b/tools/merovingian/daemon/handlers.c
--- a/tools/merovingian/daemon/handlers.c
+++ b/tools/merovingian/daemon/handlers.c
@@ -298,7 +298,7 @@ childhandler(void)
                while (p != NULL) {
                        if (p->pid == pid) {
                                /* log everything that's still in the pipes */
-                               logFD(p, 0, "MSG", p->dbname, (long long 
int)p->pid, _mero_logfile, 1);
+                               logFD(p, 0, "MSG", p->dbname, (long long 
int)p->pid, _mero_logfile, true);
                                p->pid = -1;    /* indicate the process is dead 
*/
 
                                /* close the descriptors */
diff --git a/tools/merovingian/daemon/merovingian.c 
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -139,6 +139,7 @@ logFD(dpair dp, int fd, const char *type
        time_t now;
        char buf[8096];
        ssize_t len = 0;
+       ssize_t last = 0;
        char *p, *q;
        struct tm *tmp;
        char mytime[20];
@@ -149,8 +150,10 @@ logFD(dpair dp, int fd, const char *type
                        ssize_t n;
                  repeat:
                        n = read(dp->input[fd].fd, buf + len, sizeof(buf) - len 
- 1);
-                       if (n <= 0)
+                       if (n <= 0) {
+                               rest = false;
                                break;
+                       }
                        len += n;
                        buf[len] = 0;
                } while (buf[len - 1] != '\n' && len < (ssize_t) sizeof(buf) - 
1);
@@ -159,7 +162,7 @@ logFD(dpair dp, int fd, const char *type
                now = time(NULL);
                tmp = localtime(&now);
                strftime(mytime, sizeof(mytime), "%Y-%m-%d %H:%M:%S", tmp);
-               for (q = buf; *q; q = p + 1) {
+               for (q = buf + last; *q; q = p + 1) {
                        p = strchr(q, '\n');
                        if (p == NULL) {
                                if (q > buf) {
@@ -167,6 +170,7 @@ logFD(dpair dp, int fd, const char *type
                                         * just continue reading */
                                        len = strlen(q);
                                        memmove(buf, q, len);
+                                       last = 0;
                                        goto repeat;
                                }
                                /* we must have received a ridiculously long 
line */
@@ -177,6 +181,7 @@ logFD(dpair dp, int fd, const char *type
                                                mytime, type, dbname, pid, q);
                                break;
                        }
+                       last = p + 1 - buf;
                        if (p == q) {
                                /* empty line, don't bother */
                                continue;
@@ -299,18 +304,18 @@ logListener(void *x)
                                for (int i = 0; i < nfds; i++) {
                                        if (pfd[i].fd == w->input[0].fd && 
pfd[i].revents & POLLIN)
                                                logFD(w, 0, "MSG", w->dbname,
-                                                         (long long 
int)w->pid, _mero_logfile, 0);
+                                                         (long long 
int)w->pid, _mero_logfile, false);
                                        else if (pfd[i].fd == w->input[1].fd && 
pfd[i].revents & POLLIN)
                                                logFD(w, 1, "ERR", w->dbname,
-                                                         (long long 
int)w->pid, _mero_logfile, 0);
+                                                         (long long 
int)w->pid, _mero_logfile, false);
                                }
 #else
                                if (FD_ISSET(w->input[0].fd, &readfds) != 0)
                                        logFD(w, 0, "MSG", w->dbname,
-                                                 (long long int)w->pid, 
_mero_logfile, 0);
+                                                 (long long int)w->pid, 
_mero_logfile, false);
                                if (w->input[1].fd != w->input[0].fd && 
FD_ISSET(w->input[1].fd, &readfds) != 0)
                                        logFD(w, 1, "ERR", w->dbname,
-                                                 (long long int)w->pid, 
_mero_logfile, 0);
+                                                 (long long int)w->pid, 
_mero_logfile, false);
 #endif
                                w->flag &= ~1;
                        }
diff --git a/tools/merovingian/daemon/multiplex-funnel.c 
b/tools/merovingian/daemon/multiplex-funnel.c
--- a/tools/merovingian/daemon/multiplex-funnel.c
+++ b/tools/merovingian/daemon/multiplex-funnel.c
@@ -866,7 +866,7 @@ multiplexThread(void *d)
        while (p != NULL) {
                if (p->type == MEROFUN && strcmp(p->dbname, m->name) == 0) {
                        /* log everything that's still in the pipes */
-                       logFD(p, 0, "MSG", p->dbname, (long long int)p->pid, 
_mero_logfile, 1);
+                       logFD(p, 0, "MSG", p->dbname, (long long int)p->pid, 
_mero_logfile, true);
                        /* remove from the list */
                        q->next = p->next;
                        /* close the descriptors */
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to