]> rtime.felk.cvut.cz Git - frescor/fwp.git/blobdiff - fwp/lib/fwp/fwp_endpoint.c
Handle errors correctly in fwp_send_async()
[frescor/fwp.git] / fwp / lib / fwp / fwp_endpoint.c
index 6c2bf6855039fb6392eb4355a8b8560f5fa757de..6117d6ceae0f7812cbb4e701ec9aea705a99e7f2 100644 (file)
@@ -179,7 +179,7 @@ int fwp_endpoint_attr_init(fwp_endpoint_attr_t *attr)
  * \param[in] attr Endpoint attributes
  * \param[out] epp  Pointer to the descriptor of newly created endpoint
  *
- * \return Zero on success, -1 on error and sets errno appropriately. 
+ * \return Non-negative number on success, -1 on error and sets errno appropriately. 
  *
  */
 int fwp_send_endpoint_create(unsigned int node,
@@ -276,7 +276,7 @@ err:
  * \param[in] attr Endpoint attributes
  * \param[out] epointdp  Pointer to the descriptor of newly created endpoint
  *
- * \return Zero on success, -1 on error and errno is set.
+ * \return Non-negative number on success, -1 on error and errno is set.
  */
 int fwp_receive_endpoint_create(unsigned int port,
                                fwp_endpoint_attr_t *attr,
@@ -377,10 +377,10 @@ int fwp_receive_endpoint_create(unsigned int port,
        fwp_epoint->port = ntohs(addr->sin_port);
        FWP_DEBUG("Recv port= %d\n",ntohs(addr->sin_port));     
        *epp = fwp_epoint;
-       return 0;
+       return fwp_epoint->sockd;
 err:
        fwp_endpoint_destroy(fwp_epoint);
-       return errno;
+       return -1;
 }
 
 /**
@@ -635,9 +635,10 @@ int fwp_send_async(struct fwp_endpoint *ep, const void *msg, size_t size)
        if (!ep->vres)
                return FRSH_ERR_NOT_BOUND;
 
-       if (fwp_vres_consume_budget(ep->vres, size, false) == 0)
+       ret = fwp_vres_consume_budget(ep->vres, size, false);
+       if (ret == 0)
                ret = fwp_endpoint_do_send(ep, msg, size);
-       else
+       else if (ret == 1)
                ret = fwp_vres_enqueue(ep->vres, ep, msg, size);
        return ret;
 }