libmemif: fix autoconnect
[vpp.git] / extras / libmemif / src / main.c
index f3d8f9a..42dfeaf 100644 (file)
@@ -901,8 +901,6 @@ memif_create (memif_conn_handle_t * c, memif_conn_args_t * args,
     }
   else
     {
-      lm->disconn_slaves++;
-
       elt.key = -1;
       elt.data_struct = conn;
       if ((index =
@@ -916,7 +914,7 @@ memif_create (memif_conn_handle_t * c, memif_conn_args_t * args,
 
       /* try connectiong to master */
       err = memif_request_connection (conn);
-      if ((err < 0) && (lm->disconn_slaves == 1))
+      if ((err != MEMIF_ERR_SUCCESS) && (lm->disconn_slaves == 0))
        {
          /* connection failed, arm reconnect timer (if not armed) */
          if (timerfd_settime (lm->timerfd, 0, &lm->arm, NULL) < 0)
@@ -925,6 +923,7 @@ memif_create (memif_conn_handle_t * c, memif_conn_args_t * args,
              goto error;
            }
        }
+       lm->disconn_slaves++;
     }
 
   *c = conn;
@@ -995,8 +994,9 @@ memif_request_connection (memif_conn_handle_t c)
     }
   else
     {
+      err = memif_syscall_error_handler (errno);
       strcpy ((char *) conn->remote_disconnect_string,
-             memif_strerror (memif_syscall_error_handler (errno)));
+             memif_strerror (err));
       goto error;
     }
 
@@ -1711,6 +1711,7 @@ memif_buffer_enq_tx (memif_conn_handle_t conn, uint16_t qid,
       ring->desc[slot & mask].offset =
        (uint32_t) (b0->data -
                    c->regions[ring->desc[slot & mask].region].addr);
+      ring->desc[slot & mask].flags &= ~MEMIF_DESC_FLAG_NEXT;
       ring->desc[slot & mask].flags |=
        (b0->flags & MEMIF_BUFFER_FLAG_NEXT) ? MEMIF_DESC_FLAG_NEXT : 0;