On 10/16/2013 04:41 AM, Brice Hamon wrote:
Hi guys,
I am looking for info on Rivet's ErrorScript.
I get called when something bad happens, but I would like to get all
info possible on what caused the issue.
I couldn't find much info in the documentation, so I am wondering if
anybody can help.
Thank you,
Brice.
Hi Brice
some Rivet internals in order to bring you to the core of the subject
The code here below is the key point when executing script in mod_rivet.
I removed some non essential line of code for clarity and added comments
that actually weren't in the original code (and I might put them in there)
Variable 'outbuf' is a pointer to Tcl_Obj storing the whole script
you're about to run to process your request. This script is the
concatenation of
+ BeforeScript
+ URL-referenced script
+ AfterScript
if ( Tcl_EvalObjEx(interp, outbuf, 0) == TCL_ERROR ) {
....
errorCodeListObj = Tcl_GetVar2Ex (interp, "errorCode",
(char *)NULL, TCL_GLOBAL_ONLY);
.....
/* if the error was thrown by Rivet, see if it's abort_page and,
* if so, don't treat it as an error, i.e. don't execute the
* installed error handler or the default one, just check if
* a rivet_abort_script is defined, otherwise the page emits
* as normal
*/
if (strcmp(Tcl_GetString (errorCodeElementObj),"RIVET") == 0) {
/*
...here abort_script is executed and then we
jump away to send headers and flush content
to the client
*/
goto good:
}
/* if the error hadn't triggered by abort_page then it's a
* real Tcl error occurring in the script stored in outbuf.
* we are going to treat it as such by executing the
* ErrorScript defined script (or the default handler if
* such script hadn't been set)
*/
if (conf->rivet_error_script ) {
errscript = conf->rivet_error_script;
} else {
errscript = conf->rivet_default_error_script;
}
/* Error handling in case rivet_error_script fails goes here*/
good:
/* headers are sent here and channel is flushed */
...
TclWeb_PrintHeaders(globals->req);
Tcl_Flush(*(conf->outchannel));
return TCL_OK;
}
-- Massimo
---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscr...@tcl.apache.org
For additional commands, e-mail: rivet-dev-h...@tcl.apache.org