Index

abort

Terminate statements out to an enclosing "catch $aborted()" statement.

Example:
In the following example, a user-defined track_planet command invokes the abort command if asked to track the Sun. This would abort not only the track_planet command, but also the foreach loop that called it. In fact, left unchecked it would abort all of the code enclosing the foreach loop, and the scheduling script itself. However this is prevented by the presence of a catch statement that includes a test of the $aborted() function. Because of this statement, only the section of code within the catch statement is aborted, and the next statement to be run is the first command after the catch statement.
  command track_planet(Source $src) {
    if($src == sun) {
      print "The sun is not a planet!"
      abort
    }
    ...the tracking code...
  }

  catch $aborted {
    foreach(Source s) {mars, sun} {
      track_planet sun
    }
  }
  print "Finished"

Context:
The abort command is designed for signaling error conditions in deeply nested loops or user defined commands, in a way that can be caught for remedial action by enclosing catch statements.

By default, when the abort command is invoked, it terminates the schedule that contains it. However if the abort statement is part of a section of code that is enclosed by a catch statement that calls the $aborted() function, then only that section of code is aborted.

Note that in cases where there are multiple nested catch statements that each invoke the $aborted() function, then the innermost one is the only one that is triggered, because the $aborted() function only returns true once per abort.


Martin Shepherd (17-May-2010)