@@ -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 ;
@@ -59,10 +60,10 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
5960                        opal_list_remove_item (& ompi_mtl_portals4 .recv_short_blocks ,
6061                                              & block -> base );
6162                        OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
62-                         ompi_mtl_portals4_recv_short_block_free (block );
63+                         ret   =   ompi_mtl_portals4_recv_short_block_free (block );
6364                    } else  {
6465                        OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
65-                         ompi_mtl_portals4_activate_block (block );
66+                         ret   =   ompi_mtl_portals4_activate_block (block );
6667                    }
6768                    break ;
6869
@@ -85,6 +86,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
8586            break ;
8687
8788        case  PTL_EVENT_AUTO_UNLINK :
89+             block -> me_h  =  PTL_INVALID_HANDLE ;
8890#if  OMPI_ENABLE_THREAD_MULTIPLE 
8991            OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
9092            switch  (block -> status ) {
@@ -99,12 +101,12 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
99101                        opal_list_remove_item (& ompi_mtl_portals4 .recv_short_blocks ,
100102                                              & block -> base );
101103                        OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
102-                         ompi_mtl_portals4_recv_short_block_free (block );
104+                         ret   =   ompi_mtl_portals4_recv_short_block_free (block );
103105                    } else  {
104106                        OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
105107                        OPAL_OUTPUT_VERBOSE ((10 , ompi_mtl_base_framework .framework_output ,
106108                                        "mtl:portals4 PTL_EVENT_AUTO_UNLINK received after PTL_EVENT_AUTO_FREE" ));
107-                         ompi_mtl_portals4_activate_block (block );
109+                         ret   =   ompi_mtl_portals4_activate_block (block );
108110                    }
109111                    break ;
110112
@@ -150,7 +152,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
150152            break ;
151153    }
152154
153-     return  OMPI_SUCCESS ;
155+     return  ret ;
154156}
155157
156158
@@ -210,6 +212,7 @@ ompi_mtl_portals4_activate_block(ompi_mtl_portals4_recv_short_block_t *block)
210212    me .uid  =  ompi_mtl_portals4 .uid ;
211213    me .options  = 
212214        PTL_ME_OP_PUT  |
215+         PTL_ME_EVENT_COMM_DISABLE  |
213216        PTL_ME_MANAGE_LOCAL  |
214217        PTL_ME_MAY_ALIGN ;
215218    if  (ompi_mtl_portals4 .use_logical ) {
@@ -244,7 +247,8 @@ ompi_mtl_portals4_activate_block(ompi_mtl_portals4_recv_short_block_t *block)
244247int 
245248ompi_mtl_portals4_recv_short_init (void )
246249{
247-     int  i ;
250+     int  ret  =  OMPI_SUCCESS ;
251+     uint32_t  i ;
248252
249253    OBJ_CONSTRUCT (& ompi_mtl_portals4 .short_block_mutex , opal_mutex_t );
250254    OBJ_CONSTRUCT (& (ompi_mtl_portals4 .recv_short_blocks ), opal_list_t );
@@ -258,46 +262,56 @@ ompi_mtl_portals4_recv_short_init(void)
258262        }
259263        opal_list_append (& ompi_mtl_portals4 .recv_short_blocks ,
260264                         & block -> base );
261-         ompi_mtl_portals4_activate_block (block );
265+         ret   =   ompi_mtl_portals4_activate_block (block );
262266    }
263267
264-     return  OMPI_SUCCESS ;
268+     return  ret ;
265269}
266270
267271
268272int 
269273ompi_mtl_portals4_recv_short_fini (void )
270274{
271275    opal_list_item_t  * item ;
276+     int  ret  =  OMPI_SUCCESS ;
272277
273278    OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
274279    while  (NULL  !=   (item  =  opal_list_remove_first (& ompi_mtl_portals4 .recv_short_blocks ))) {
275280        ompi_mtl_portals4_recv_short_block_t  * block  = 
276281            (ompi_mtl_portals4_recv_short_block_t * ) item ;
277-         ompi_mtl_portals4_recv_short_block_free (block );
282+         ret  =  ompi_mtl_portals4_recv_short_block_free (block );
283+         ompi_mtl_portals4 .active_recv_short_blocks -- ;
278284    }
279285    OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
280286
281-     return  OMPI_SUCCESS ;
287+     return  ret ;
282288}
283289
284290
285291int 
286292ompi_mtl_portals4_recv_short_link (int  count )
287293{
294+     int  ret  =  OMPI_SUCCESS ;
288295    int  active  =  ompi_mtl_portals4 .active_recv_short_blocks ;
289296    int  i ;
290297
291298    if  (active  <  count ) {
292299        for  (i  =  0  ; i  <  (count  -  active ) ; ++ i ) {
293300            ompi_mtl_portals4_recv_short_block_t  * block  = 
294-                 ompi_mtl_portals4_recv_short_block_alloc (false );
301+                 ompi_mtl_portals4_recv_short_block_alloc (true );
295302            if  (NULL  ==  block ) {
296303                return  OMPI_ERR_OUT_OF_RESOURCE ;
297304            }
298-             ompi_mtl_portals4_activate_block (block );
305+             OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
306+             opal_list_append (& ompi_mtl_portals4 .recv_short_blocks ,
307+                          & block -> base );
308+             OPAL_OUTPUT_VERBOSE ((10 , ompi_mtl_base_framework .framework_output ,
309+              "recv_short_link: total=%d active=%d" ,
310+              (int ) opal_list_get_size (& ompi_mtl_portals4 .recv_short_blocks ), ompi_mtl_portals4 .active_recv_short_blocks ));
311+             OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
312+             ret  =  ompi_mtl_portals4_activate_block (block );
299313        }
300314    }
301315
302-     return  OMPI_SUCCESS ;
316+     return  ret ;
303317}
0 commit comments