Index: openacs-4/packages/acs-tcl/acs-tcl.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/acs-tcl.info,v diff -u -r1.95.2.75 -r1.95.2.76 --- openacs-4/packages/acs-tcl/acs-tcl.info 20 Aug 2024 13:58:28 -0000 1.95.2.75 +++ openacs-4/packages/acs-tcl/acs-tcl.info 28 Aug 2024 06:31:06 -0000 1.95.2.76 @@ -9,7 +9,7 @@ f t - + OpenACS The Kernel Tcl API library. 2023-05-15 @@ -18,7 +18,7 @@ GPL version 2 3 - + Index: openacs-4/packages/acs-tcl/tcl/exception-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/exception-procs.tcl,v diff -u -r1.11.2.5 -r1.11.2.6 --- openacs-4/packages/acs-tcl/tcl/exception-procs.tcl 28 Dec 2022 09:25:22 -0000 1.11.2.5 +++ openacs-4/packages/acs-tcl/tcl/exception-procs.tcl 28 Aug 2024 06:31:06 -0000 1.11.2.6 @@ -153,6 +153,40 @@ } } +ad_proc ad_unless_script_abort { + body + non_abort_action +} { + + Execute the provided body in the callers' environment. When the + body does not raise an "ad_script_abort" exception, the + "non_abort_action" is also executed. This pattern is useful when + handling client requests and where the "non_abort_action" is used + to return results to the client. When "ad_script_abort" is + executed, the connection is usually closed, and any attempt to + talk to the client over the closed connection will fail. + + The handling of script_abort exceptions is done usually in the + request processor. The function is useful when registering own + request procs (e.g., via "ns_register_proc") where the OpenACS + request processor is not involved. + + @param body script, which is always executed + @param non_abort_action script, which is executed unless the + body was aborted. + + @see ad_script_abort +} { + ad_try -auto_abort=false { + uplevel $body + } trap {AD EXCEPTION ad_script_abort} {r} { + # do nothing + } on ok RESULT { + uplevel $non_abort_action + } +} + + # Local variables: # mode: tcl # tcl-indent-level: 4