diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2015-03-26 14:47:53 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2015-03-26 14:47:53 +0000 |
commit | 99b7f47c54ae7932715a1f58ed9a128451fb2b85 (patch) | |
tree | 28882e5f8c3c2d66a9ccfd4d434639c480f4f0c4 /migration/rdma.c | |
parent | 1ee76e5191e4275bf2f7ad251385c96d6ce47b86 (diff) | |
parent | 43edc0ed11a4d25f2fe67bb9d89a8a6a0a43b1e0 (diff) |
Merge remote-tracking branch 'remotes/juanquintela/tags/migration/20150326' into staging
migration/next for 20150326
# gpg: Signature made Thu Mar 26 14:31:55 2015 GMT using RSA key ID 5872D723
# gpg: Can't check signature: public key not found
* remotes/juanquintela/tags/migration/20150326:
migration: remove last_sent_block from save_page_header
rdma: Fix cleanup in error paths
Avoid crashing on multiple -incoming
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'migration/rdma.c')
-rw-r--r-- | migration/rdma.c | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/migration/rdma.c b/migration/rdma.c index e6c3a67b54..77e34441dc 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -2194,6 +2194,10 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) } } + if (rdma->qp) { + rdma_destroy_qp(rdma->cm_id); + rdma->qp = NULL; + } if (rdma->cq) { ibv_destroy_cq(rdma->cq); rdma->cq = NULL; @@ -2206,18 +2210,14 @@ static void qemu_rdma_cleanup(RDMAContext *rdma) ibv_dealloc_pd(rdma->pd); rdma->pd = NULL; } - if (rdma->listen_id) { - rdma_destroy_id(rdma->listen_id); - rdma->listen_id = NULL; - } if (rdma->cm_id) { - if (rdma->qp) { - rdma_destroy_qp(rdma->cm_id); - rdma->qp = NULL; - } rdma_destroy_id(rdma->cm_id); rdma->cm_id = NULL; } + if (rdma->listen_id) { + rdma_destroy_id(rdma->listen_id); + rdma->listen_id = NULL; + } if (rdma->channel) { rdma_destroy_event_channel(rdma->channel); rdma->channel = NULL; @@ -2309,8 +2309,6 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) if (ret) { perror("rdma_connect"); ERROR(errp, "connecting to destination!"); - rdma_destroy_id(rdma->cm_id); - rdma->cm_id = NULL; goto err_rdma_source_connect; } @@ -2319,8 +2317,6 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) perror("rdma_get_cm_event after rdma_connect"); ERROR(errp, "connecting to destination!"); rdma_ack_cm_event(cm_event); - rdma_destroy_id(rdma->cm_id); - rdma->cm_id = NULL; goto err_rdma_source_connect; } @@ -2328,8 +2324,6 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error **errp) perror("rdma_get_cm_event != EVENT_ESTABLISHED after rdma_connect"); ERROR(errp, "connecting to destination!"); rdma_ack_cm_event(cm_event); - rdma_destroy_id(rdma->cm_id); - rdma->cm_id = NULL; goto err_rdma_source_connect; } rdma->connected = true; |