Vlad,

Please pull for OFED-1.4.1:

git://git.openfabrics.org/~ralphc/libipathverbs/.git ofed_1_4

commit 337df3c1cbe43c3e9cb58e7f6e91f44603dd23fb
Author: Patrick Latifi <[email protected]>
Date:   Thu Mar 12 12:46:25 2009 -0700

    IB/libipathverbs: fix memory leak in error path
    
    If the CQ or QP is created but the queue cannot be mmapped, be sure
    to delete the allocated CQ or QP.
    
    Signed-off-by: Patrick Latifi <[email protected]>

diff --git a/src/verbs.c b/src/verbs.c
index dcd8efb..b73b7f7 100644
--- a/src/verbs.c
+++ b/src/verbs.c
@@ -182,6 +182,7 @@ struct ibv_cq *ipath_create_cq(struct ibv_context *context, 
int cqe,
        cq->queue = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
                         context->cmd_fd, resp.offset);
        if ((void *) cq->queue == MAP_FAILED) {
+               ibv_cmd_destroy_cq(&cq->ibv_cq);
                free(cq);
                return NULL;
        }
@@ -338,6 +339,7 @@ struct ibv_qp *ipath_create_qp(struct ibv_pd *pd, struct 
ibv_qp_init_attr *attr)
                                  PROT_READ | PROT_WRITE, MAP_SHARED,
                                  pd->context->cmd_fd, resp.offset);
                if ((void *) qp->rq.rwq == MAP_FAILED) {
+                       ibv_cmd_destroy_qp(&qp->ibv_qp);
                        free(qp);
                        return NULL;
                }
@@ -532,6 +534,7 @@ struct ibv_srq *ipath_create_srq(struct ibv_pd *pd,
        srq->rq.rwq = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
                           pd->context->cmd_fd, resp.offset);
        if ((void *) srq->rq.rwq == MAP_FAILED) {
+               ibv_cmd_destroy_srq(&srq->ibv_srq);
                free(srq);
                return NULL;
        }


_______________________________________________
ewg mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to