Ignore:
Timestamp:
10/09/15 16:13:43 (9 years ago)
Author:
dubos
Message:

Bugfix : memory leak in transfert_mpi / New : detect send_message not paired with wait_message

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/transfert_mpi.f90

    r358 r364  
    6161   
    6262  TYPE t_message 
     63    CHARACTER(LEN=100) :: name ! for debug 
    6364    TYPE(t_request), POINTER :: request(:) 
    6465    INTEGER :: nreq 
     
    7273    LOGICAL :: completed 
    7374    LOGICAL :: pending 
     75    LOGICAL :: open      ! for debug 
    7476    INTEGER :: number 
    7577  END TYPE t_message 
     
    816818 
    817819 
    818   SUBROUTINE init_message_seq(field, request, message) 
     820  SUBROUTINE init_message_seq(field, request, message, name) 
    819821  USE field_mod 
    820822  USE domain_mod 
     
    826828    TYPE(t_request),POINTER :: request(:) 
    827829    TYPE(t_message) :: message 
    828  
     830    CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: name 
    829831!$OMP MASTER     
    830832    message%request=>request 
     833    IF(PRESENT(name)) THEN 
     834       message%name = TRIM(name) 
     835    ELSE 
     836       message%name = 'unknown' 
     837    END IF 
    831838!$OMP END MASTER     
    832839!$OMP BARRIER     
     
    879886 
    880887     
    881   SUBROUTINE init_message_mpi(field,request, message) 
     888  SUBROUTINE init_message_mpi(field,request, message, name) 
    882889  USE field_mod 
    883890  USE domain_mod 
     
    890897    TYPE(t_request),POINTER :: request(:) 
    891898    TYPE(t_message) :: message 
     899    CHARACTER(LEN=*), INTENT(IN),OPTIONAL :: name 
    892900 
    893901    TYPE(ARRAY),POINTER :: recv,send  
     
    904912!$OMP BARRIER 
    905913!$OMP MASTER 
     914    IF(PRESENT(name)) THEN 
     915       message%name = TRIM(name) 
     916    ELSE 
     917       message%name = 'unknown' 
     918    END IF 
    906919    message%number=message_number 
    907920    message_number=message_number+1 
     
    921934    message%pending=.FALSE. 
    922935    message%completed=.FALSE. 
    923    
     936    message%open=.FALSE. 
     937 
    924938    DO ind=1,ndomain 
    925939      req=>request(ind) 
     
    10461060    ENDIF 
    10471061     
    1048  
     1062    DEALLOCATE(message%mpi_req) 
     1063    DEALLOCATE(message%buffers) 
     1064    DEALLOCATE(message%status) 
    10491065 
    10501066!$OMP END MASTER 
     
    11121128 
    11131129!$OMP MASTER 
     1130    IF(message%open) THEN 
     1131       PRINT *, 'send_message_mpi : message ' // TRIM(message%name) // & 
     1132            ' is still open, no call to wait_message_mpi after last send_message_mpi' 
     1133       CALL ABORT 
     1134    END IF 
     1135    message%open=.TRUE. ! will be set to .FALSE. by wait_message_mpi 
     1136 
    11141137    message%field=>field 
    11151138 
     
    14611484    INTEGER :: offset 
    14621485 
     1486    message%open=.FALSE. 
    14631487    IF (.NOT. message%pending) RETURN 
    14641488 
Note: See TracChangeset for help on using the changeset viewer.