1
1

Merge pull request #1283 from artpol84/udcm_race_fix

Fix race condition in UDCM
Этот коммит содержится в:
Nathan Hjelm 2016-01-09 08:19:20 -07:00
родитель 0fb7b07a71 84e4fb308b
Коммит aefc2ed3e8

Просмотреть файл

@ -9,6 +9,7 @@
* and Technology (RIST). All rights reserved.
* Copyright (c) 2014 Intel, Inc. All rights reserved.
* Copyright (c) 2014 Bull SAS. All rights reserved.
* Copyright (c) 2016 Mellanox Technologies. All rights reserved.
*
* $COPYRIGHT$
*
@ -2101,6 +2102,8 @@ static int udcm_process_messages (struct ibv_cq *event_cq, udcm_module_t *m)
udcm_module_post_one_recv (m, msg_num);
}
opal_atomic_wmb ();
if (0 == opal_atomic_swap_32 (&m->cm_message_event_active, 1)) {
opal_event_active (&m->cm_message_event, OPAL_EV_READ, 1);
}
@ -2158,6 +2161,10 @@ static void *udcm_message_callback (int fd, int flags, void *context)
BTL_VERBOSE(("running message thread"));
/* Mark that the callback was started */
opal_atomic_swap_32 (&m->cm_message_event_active, 0);
opal_atomic_wmb ();
while ((item = (udcm_message_recv_t *) opal_fifo_pop_atomic (&m->cm_recv_msg_fifo))) {
mca_btl_openib_endpoint_t *lcl_ep = item->msg_hdr.lcl_ep;
@ -2199,8 +2206,6 @@ static void *udcm_message_callback (int fd, int flags, void *context)
BTL_VERBOSE(("exiting message thread"));
opal_atomic_swap_32 (&m->cm_message_event_active, 0);
return NULL;
}