Provided by: tcl8.4-doc_8.4.20-8_all bug

NAME

       Tcl_Exit,   Tcl_Finalize,  Tcl_CreateExitHandler,  Tcl_DeleteExitHandler,  Tcl_ExitThread,
       Tcl_FinalizeThread, Tcl_CreateThreadExitHandler,  Tcl_DeleteThreadExitHandler  -  end  the
       application or thread (and invoke exit handlers)

SYNOPSIS

       #include <tcl.h>

       Tcl_Exit(status)

       Tcl_Finalize()

       Tcl_CreateExitHandler(proc, clientData)

       Tcl_DeleteExitHandler(proc, clientData)

       Tcl_ExitThread(status)

       Tcl_FinalizeThread()

       Tcl_CreateThreadExitHandler(proc, clientData)

       Tcl_DeleteThreadExitHandler(proc, clientData)

ARGUMENTS

       int            status       (in)      Provides  information  about  why the application or
                                             thread  exited.   Exact  meaning  may  be  platform-
                                             specific.   0  usually  means  a  normal  exit,  any
                                             nonzero value usually means that an error occurred.

       Tcl_ExitProc   *proc        (in)      Procedure to invoke before exiting application.

       ClientData     clientData   (in)      Arbitrary one-word value to pass to proc.
_________________________________________________________________

DESCRIPTION

       The procedures described here provide a graceful mechanism to end the execution of  a  Tcl
       application.  Exit  handlers  are invoked to cleanup the application's state before ending
       the execution of Tcl code.

       Invoke Tcl_Exit to end a Tcl application and to exit from this process. This procedure  is
       invoked  by  the  exit  command,  and  can  be  invoked  anyplace  else  to  terminate the
       application.  No-one should ever invoke the exit system procedure directly;  always invoke
       Tcl_Exit  instead,  so  that it can invoke exit handlers.  Note that if other code invokes
       exit system procedure directly, or otherwise causes the application to  terminate  without
       calling Tcl_Exit, the exit handlers will not be run.  Tcl_Exit internally invokes the exit
       system call, thus it never returns control to its caller.

       Tcl_Finalize is similar to Tcl_Exit except that it does not exit from the current process.
       It  is  useful for cleaning up when a process is finished using Tcl but wishes to continue
       executing, and when Tcl is used in a dynamically loaded extension  that  is  about  to  be
       unloaded.  On some systems Tcl is automatically notified when it is being unloaded, and it
       calls Tcl_Finalize internally; on these  systems  it  not  necessary  for  the  caller  to
       explicitly  call  Tcl_Finalize.   However,  to ensure portability, your code should always
       invoke Tcl_Finalize when Tcl is being unloaded, to ensure that the code will work  on  all
       platforms. Tcl_Finalize can be safely called more than once.

       Tcl_ExitThread  is  used  to  terminate  the  current  thread  and  invoke per-thread exit │
       handlers.  This finalization is done by Tcl_FinalizeThread, which you can call if you just │
       want to clean up per-thread state and invoke the thread exit handlers.  Tcl_Finalize calls │
       Tcl_FinalizeThread for the current thread automatically.

       Tcl_CreateExitHandler arranges for proc  to  be  invoked  by  Tcl_Finalize  and  Tcl_Exit.
       Tcl_CreateThreadExitHandler  arranges  for  proc  to  be invoked by Tcl_FinalizeThread and
       Tcl_ExitThread.  This provides a hook for cleanup operations such as flushing buffers  and
       freeing global memory.  Proc should match the type Tcl_ExitProc:
              typedef void Tcl_ExitProc(ClientData clientData);
       The  clientData  parameter  to  proc  is  a  copy  of  the  clientData  argument  given to
       Tcl_CreateExitHandler  or  Tcl_CreateThreadExitHandler  when  the  callback  was  created.
       Typically,   clientData   points  to  a  data  structure  containing  application-specific
       information about what to do in proc.

       Tcl_DeleteExitHandler  and  Tcl_DeleteThreadExitHandler  may  be  called   to   delete   a
       previously-created  exit handler.  It removes the handler indicated by proc and clientData
       so  that  no  call  to  proc  will  be   made.    If   no   such   handler   exists   then
       Tcl_DeleteExitHandler or Tcl_DeleteThreadExitHandler does nothing.

       Tcl_Finalize  and Tcl_Exit execute all registered exit handlers, in reverse order from the │
       order in which they were registered.  This matches the natural order in  which  extensions │
       are  loaded and unloaded; if extension A loads extension B, it usually unloads B before it │
       itself is unloaded.  If extension A registers its exit handlers before  loading  extension │
       B, this ensures that any exit handlers for B will be executed before the exit handlers for │
       A.                                                                                         │

       Tcl_Finalize and Tcl_Exit call Tcl_FinalizeThread and the thread exit handlers  after  the │
       process-wide  exit  handlers.   This  is  because  thread  finalization shuts down the I/O │
       channel system, so any attempt at I/O by the global exit handlers  will  vanish  into  the │
       bitbucket.

KEYWORDS

       callback, cleanup, dynamic loading, end application, exit, unloading, thread