@@ -1118,7 +1118,7 @@ PREFIX (send) (caf_token_t token, size_t offset, int image_index,
1118
1118
gfc_descriptor_t * dest ,
1119
1119
caf_vector_t * dst_vector __attribute__ ((unused )),
1120
1120
gfc_descriptor_t * src , int dst_kind , int src_kind ,
1121
- bool mrt )
1121
+ int * stat , bool mrt )
1122
1122
{
1123
1123
/* FIXME: Implement vector subscripts, type conversion and check whether
1124
1124
string-kind conversions are permitted.
@@ -1505,11 +1505,10 @@ PREFIX (get) (caf_token_t token, size_t offset,
1505
1505
gfc_descriptor_t * src ,
1506
1506
caf_vector_t * src_vector __attribute__ ((unused )),
1507
1507
gfc_descriptor_t * dest , int src_kind , int dst_kind ,
1508
- bool mrt )
1508
+ int * stat , bool mrt )
1509
1509
{
1510
1510
size_t i , size ;
1511
- int ierr = 0 ;
1512
- int j ;
1511
+ int ierr = 0 , j , flag ;
1513
1512
MPI_Win * p = token ;
1514
1513
int rank = GFC_DESCRIPTOR_RANK (src );
1515
1514
size_t src_size = GFC_DESCRIPTOR_SIZE (src );
@@ -1572,9 +1571,18 @@ PREFIX (get) (caf_token_t token, size_t offset,
1572
1571
# else // CAF_MPI_LOCK_UNLOCK
1573
1572
MPI_Win_flush (image_index - 1 , * p );
1574
1573
# endif // CAF_MPI_LOCK_UNLOCK
1574
+ MPI_Test (& lock_req ,& flag ,MPI_STATUS_IGNORE );
1575
+
1576
+ if (error_called == 1 )
1577
+ {
1578
+ communicator_shrink (& CAF_COMM_WORLD );
1579
+ error_called = 0 ;
1580
+ ierr = STAT_FAILED_IMAGE ;
1581
+ }
1582
+
1583
+ if (!stat && ierr == STAT_FAILED_IMAGE )
1584
+ error_stop (ierr );
1575
1585
}
1576
- if (ierr != 0 )
1577
- error_stop (ierr );
1578
1586
return ;
1579
1587
}
1580
1588
@@ -1663,6 +1671,22 @@ PREFIX (get) (caf_token_t token, size_t offset,
1663
1671
1664
1672
//sr_off = offset;
1665
1673
1674
+ MPI_Test (& lock_req ,& flag ,MPI_STATUS_IGNORE );
1675
+
1676
+ if (error_called == 1 )
1677
+ {
1678
+ communicator_shrink (& CAF_COMM_WORLD );
1679
+ error_called = 0 ;
1680
+ ierr = STAT_FAILED_IMAGE ;
1681
+ printf ("In error_called\n" );
1682
+ }
1683
+
1684
+ if (!stat && ierr == STAT_FAILED_IMAGE )
1685
+ {
1686
+ printf ("error\n" );
1687
+ error_stop (ierr );
1688
+ }
1689
+
1666
1690
# ifdef CAF_MPI_LOCK_UNLOCK
1667
1691
MPI_Win_lock (MPI_LOCK_SHARED , image_index - 1 , 0 , * p );
1668
1692
# endif // CAF_MPI_LOCK_UNLOCK
@@ -1675,8 +1699,8 @@ PREFIX (get) (caf_token_t token, size_t offset,
1675
1699
MPI_Win_flush (image_index - 1 , * p );
1676
1700
# endif // CAF_MPI_LOCK_UNLOCK
1677
1701
1678
- if (ierr != 0 )
1679
- error_stop (ierr );
1702
+ /* if (ierr != 0) */
1703
+ /* error_stop (ierr); */
1680
1704
1681
1705
MPI_Type_free (& dt_s );
1682
1706
MPI_Type_free (& dt_d );
0 commit comments