@@ -37,6 +37,7 @@ static int
3737ompi_mtl_portals4_recv_block_progress (ptl_event_t  * ev ,
3838                                     ompi_mtl_portals4_base_request_t *  ptl_base_request )
3939{
40+     int  ret  =  OMPI_SUCCESS ;
4041    ompi_mtl_portals4_recv_short_request_t  * ptl_request  = 
4142        (ompi_mtl_portals4_recv_short_request_t * ) ptl_base_request ;
4243    ompi_mtl_portals4_recv_short_block_t  * block  =  ptl_request -> block ;
@@ -58,10 +59,10 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
5859                        opal_list_remove_item (& ompi_mtl_portals4 .recv_short_blocks ,
5960                                              & block -> base );
6061                        OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
61-                         ompi_mtl_portals4_recv_short_block_free (block );
62+                         ret   =   ompi_mtl_portals4_recv_short_block_free (block );
6263                    } else  {
6364                        OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
64-                         ompi_mtl_portals4_activate_block (block );
65+                         ret   =   ompi_mtl_portals4_activate_block (block );
6566                    }
6667                    break ;
6768
@@ -76,6 +77,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
7677            break ;
7778
7879        case  PTL_EVENT_AUTO_UNLINK :
80+             block -> me_h  =  PTL_INVALID_HANDLE ;
7981            OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
8082            switch  (block -> status ) {
8183                case  BLOCK_STATUS_ACTIVATED : /* Normal case */ 
@@ -89,12 +91,12 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
8991                        opal_list_remove_item (& ompi_mtl_portals4 .recv_short_blocks ,
9092                                              & block -> base );
9193                        OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
92-                         ompi_mtl_portals4_recv_short_block_free (block );
94+                         ret   =   ompi_mtl_portals4_recv_short_block_free (block );
9395                    } else  {
9496                        OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
9597                        OPAL_OUTPUT_VERBOSE ((10 , ompi_mtl_base_framework .framework_output ,
9698                                        "mtl:portals4 PTL_EVENT_AUTO_UNLINK received after PTL_EVENT_AUTO_FREE" ));
97-                         ompi_mtl_portals4_activate_block (block );
99+                         ret   =   ompi_mtl_portals4_activate_block (block );
98100                    }
99101                    break ;
100102
@@ -133,7 +135,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
133135            break ;
134136    }
135137
136-     return  OMPI_SUCCESS ;
138+     return  ret ;
137139}
138140
139141
@@ -193,6 +195,7 @@ ompi_mtl_portals4_activate_block(ompi_mtl_portals4_recv_short_block_t *block)
193195    me .uid  =  ompi_mtl_portals4 .uid ;
194196    me .options  = 
195197        PTL_ME_OP_PUT  |
198+         PTL_ME_EVENT_COMM_DISABLE  |
196199        PTL_ME_MANAGE_LOCAL  |
197200        PTL_ME_MAY_ALIGN ;
198201    if  (ompi_mtl_portals4 .use_logical ) {
@@ -227,7 +230,8 @@ ompi_mtl_portals4_activate_block(ompi_mtl_portals4_recv_short_block_t *block)
227230int 
228231ompi_mtl_portals4_recv_short_init (void )
229232{
230-     int  i ;
233+     int  ret  =  OMPI_SUCCESS ;
234+     uint32_t  i ;
231235
232236    OBJ_CONSTRUCT (& ompi_mtl_portals4 .short_block_mutex , opal_mutex_t );
233237    OBJ_CONSTRUCT (& (ompi_mtl_portals4 .recv_short_blocks ), opal_list_t );
@@ -241,46 +245,56 @@ ompi_mtl_portals4_recv_short_init(void)
241245        }
242246        opal_list_append (& ompi_mtl_portals4 .recv_short_blocks ,
243247                         & block -> base );
244-         ompi_mtl_portals4_activate_block (block );
248+         ret   =   ompi_mtl_portals4_activate_block (block );
245249    }
246250
247-     return  OMPI_SUCCESS ;
251+     return  ret ;
248252}
249253
250254
251255int 
252256ompi_mtl_portals4_recv_short_fini (void )
253257{
254258    opal_list_item_t  * item ;
259+     int  ret  =  OMPI_SUCCESS ;
255260
256261    OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
257262    while  (NULL  !=   (item  =  opal_list_remove_first (& ompi_mtl_portals4 .recv_short_blocks ))) {
258263        ompi_mtl_portals4_recv_short_block_t  * block  = 
259264            (ompi_mtl_portals4_recv_short_block_t * ) item ;
260-         ompi_mtl_portals4_recv_short_block_free (block );
265+         ret  =  ompi_mtl_portals4_recv_short_block_free (block );
266+         ompi_mtl_portals4 .active_recv_short_blocks -- ;
261267    }
262268    OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
263269
264-     return  OMPI_SUCCESS ;
270+     return  ret ;
265271}
266272
267273
268274int 
269275ompi_mtl_portals4_recv_short_link (int  count )
270276{
277+     int  ret  =  OMPI_SUCCESS ;
271278    int  active  =  ompi_mtl_portals4 .active_recv_short_blocks ;
272279    int  i ;
273280
274281    if  (active  <  count ) {
275282        for  (i  =  0  ; i  <  (count  -  active ) ; ++ i ) {
276283            ompi_mtl_portals4_recv_short_block_t  * block  = 
277-                 ompi_mtl_portals4_recv_short_block_alloc (false );
284+                 ompi_mtl_portals4_recv_short_block_alloc (true );
278285            if  (NULL  ==  block ) {
279286                return  OMPI_ERR_OUT_OF_RESOURCE ;
280287            }
281-             ompi_mtl_portals4_activate_block (block );
288+             OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
289+             opal_list_append (& ompi_mtl_portals4 .recv_short_blocks ,
290+                          & block -> base );
291+             OPAL_OUTPUT_VERBOSE ((10 , ompi_mtl_base_framework .framework_output ,
292+              "recv_short_link: total=%d active=%d" ,
293+              (int ) opal_list_get_size (& ompi_mtl_portals4 .recv_short_blocks ), ompi_mtl_portals4 .active_recv_short_blocks ));
294+             OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
295+             ret  =  ompi_mtl_portals4_activate_block (block );
282296        }
283297    }
284298
285-     return  OMPI_SUCCESS ;
299+     return  ret ;
286300}
0 commit comments