resource-asm: handle errors better in asm-bridge.
authorIsmo Puustinen <ismo.puustinen@intel.com>
Mon, 15 Apr 2013 10:46:47 +0000 (13:46 +0300)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Thu, 8 Jan 2015 16:37:09 +0000 (18:37 +0200)
Now, if something really bad happens to the message queues (such as they
are removed or become inaccessible), exit asm-bridge instead of looping
forever receiving error messages.

src/plugins/resource-asm/asm-bridge.c

index ffba630..5f0303f 100644 (file)
@@ -128,9 +128,20 @@ static void *wait_queue (void *arg) {
 
         if (ret < 0) {
             log_write("error receiving a message: '%s'!\n", strerror(errno));
-            /* remove erroneous message from queue */
-            msgrcv(asm_rcv_msgid, &msg, size, 0, MSG_NOERROR);
-            continue;
+
+            if (errno == E2BIG) {
+                /* remove erroneous message from queue */
+                msgrcv(asm_rcv_msgid, &msg, size, 0, MSG_NOERROR);
+                continue;
+            }
+            else if (errno == EAGAIN || errno == ENOMSG || errno == EINTR) {
+                continue;
+            }
+            else /* EACCES, EFAULT, EIDRM, EINVAL */  {
+                /* the message queue was removed from the system or became
+                 * otherwise unusable */
+                return NULL;
+            }
         }
 
         /* alignment is fine, since the first argument to the struct is a long */