Changeset: a0fec1753e6f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a0fec1753e6f
Modified Files:
        tools/merovingian/daemon/client.c
Branch: Aug2018
Log Message:

Not all errors are the same: don't exit for transient failures.
This (hopefully) fixes bug 6635.


diffs (70 lines):

diff --git a/tools/merovingian/daemon/client.c 
b/tools/merovingian/daemon/client.c
--- a/tools/merovingian/daemon/client.c
+++ b/tools/merovingian/daemon/client.c
@@ -459,7 +459,17 @@ acceptConnections(int sock, int usock)
                if (retval == -1) {
                        if (_mero_keep_listening == 0)
                                break;
-                       if (errnr != EINTR) {
+                       switch (errnr) {
+                       case EINTR:
+                               /* interrupted */
+                               break;
+                       case EMFILE:
+                       case ENFILE:
+                       case ENOBUFS:
+                       case ENOMEM:
+                               /* transient failures */
+                               break;
+                       default:
                                msg = strerror(errnr);
                                goto error;
                        }
@@ -469,8 +479,21 @@ acceptConnections(int sock, int usock)
                        if ((msgsock = accept4(sock, (SOCKPTR)0, (socklen_t *) 
0, SOCK_CLOEXEC)) == -1) {
                                if (_mero_keep_listening == 0)
                                        break;
-                               if (errno != EINTR) {
-                                       msg = strerror(errno);
+                               switch (errnr) {
+                               case EINTR:
+                                       /* interrupted */
+                                       break;
+                               case EMFILE:
+                               case ENFILE:
+                               case ENOBUFS:
+                               case ENOMEM:
+                                       /* transient failures */
+                                       break;
+                               case ECONNABORTED:
+                                       /* connection aborted before we began */
+                                       break;
+                               default:
+                                       msg = strerror(errnr);
                                        goto error;
                                }
                                continue;
@@ -488,8 +511,21 @@ acceptConnections(int sock, int usock)
                        if ((msgsock = accept4(usock, (SOCKPTR)0, (socklen_t 
*)0, SOCK_CLOEXEC)) == -1) {
                                if (_mero_keep_listening == 0)
                                        break;
-                               if (errno != EINTR) {
-                                       msg = strerror(errno);
+                               switch (errnr) {
+                               case EINTR:
+                                       /* interrupted */
+                                       break;
+                               case EMFILE:
+                               case ENFILE:
+                               case ENOBUFS:
+                               case ENOMEM:
+                                       /* transient failures */
+                                       break;
+                               case ECONNABORTED:
+                                       /* connection aborted before we began */
+                                       break;
+                               default:
+                                       msg = strerror(errnr);
                                        goto error;
                                }
                                continue;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to