Changeset 70 for trunk/signal-checkpoint


Ignore:
Timestamp:
May 25, 2012, 6:16:35 PM (12 years ago)
Author:
g7moreau
Message:
  • Begin error code return Not finish...
Location:
trunk/signal-checkpoint
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/signal-checkpoint/signal_checkpoint.F90

    r68 r70  
    2626! False public, only for trap procedure
    2727integer, public :: INTERNAL_RECEIVED_COUNT_ = 0  ! Global Counter
     28integer, public :: INTERNAL_ERROR_ON_EXIT_  = 0
     29integer, public :: INTERNAL_SIGNAL_EXIT_    = 0
    2830
    2931public :: SIGHUP
     
    3638public :: signal_checkpoint_is_received
    3739public :: signal_checkpoint_received_times
     40public :: signal_checkpoint_ask_for_exit_code
    3841
    3942!--------------------------------------------------------------!
     
    4144!--------------------------------------------------------------!
    4245
    43 subroutine signal_checkpoint_connect (SIG_NUM)
     46subroutine signal_checkpoint_connect (SIG_NUM, EXIT)
    4447   integer, intent(in) :: SIG_NUM
     48   logical, intent(in), optional :: EXIT
     49
    4550
    4651#ifdef __INTEL_COMPILER
    4752   integer :: ERR
    48      
     53
     54   if (present(EXIT)) then
     55      INTERNAL_SIGNAL_EXIT_ = SIG_NUM
     56   end if
     57
    4958   ERR = signal(SIG_NUM, signal_checkpoint_trap_callback_intel_, -1)
    5059#endif
     
    5261#ifdef __GNUC__
    5362   intrinsic signal
     63
     64   if (present(EXIT)) then
     65      INTERNAL_SIGNAL_EXIT_ = SIG_NUM
     66   end if
    5467
    5568   call signal(SIG_NUM, signal_checkpoint_trap_callback_gfortran_)
     
    7588
    7689!--------------------------------------------------------------!
     90
     91function signal_checkpoint_ask_for_exit_code () result (EXIT)
     92   logical :: EXIT
     93   
     94   EXIT = ( INTERNAL_ERROR_ON_EXIT_ /= 0 )
     95end function
     96
     97!--------------------------------------------------------------!
    7798end module
    7899!--------------------------------------------------------------!
     
    88109   integer, intent(in) :: SIG_NUM
    89110
     111!       print *, "SIG1 : ", SIG_NUM
     112!  if (SIG_NUM == INTERNAL_SIGNAL_EXIT_) then
     113!      print *, "SIG2 : ", INTERNAL_SIGNAL_EXIT_
     114!      INTERNAL_ERROR_ON_EXIT_ = 1
     115!      print *, "SIG3 : ", INTERNAL_SIGNAL_EXIT_
     116!   end if
    90117   INTERNAL_RECEIVED_COUNT_ = INTERNAL_RECEIVED_COUNT_ + 1
    91118end subroutine
     
    98125   integer :: ONE
    99126
     127!   if (SIG_NUM == INTERNAL_SIGNAL_EXIT_) then
     128!      INTERNAL_ERROR_ON_EXIT_ = 1
     129!   end if
    100130   INTERNAL_RECEIVED_COUNT_ = INTERNAL_RECEIVED_COUNT_ + 1
    101131   ONE = 1
  • trunk/signal-checkpoint/test_sgck1.f90

    r69 r70  
    1515      signal_checkpoint_is_received, &
    1616      signal_checkpoint_received_times, &
     17      signal_checkpoint_ask_for_exit_code, &
    1718      SIGUSR2, &
    1819      SIGUSR1
     
    2122
    2223   call signal_checkpoint_connect(SIGUSR2)
    23    call signal_checkpoint_connect(SIGUSR1)
     24   call signal_checkpoint_connect(SIGUSR1, EXIT=.true.)
    2425
    2526   print *, "initialising phase"
     
    3334
    3435   print *, "finishing phase"
     36
     37   if (signal_checkpoint_ask_for_exit_code()) then
     38      stop 1
     39   end if
    3540end program
Note: See TracChangeset for help on using the changeset viewer.