int Web_Finalize_AP()

in src/generic/modwebsh_ap.c [129:184]


int Web_Finalize_AP(ClientData clientData,
		 Tcl_Interp * interp, int objc, Tcl_Obj * CONST objv[])
{

    WebInterp *webInterp = (WebInterp *) clientData;

    int res = TCL_OK;
    int len = -1;
    int i = 0;
    Tcl_Obj *tobj = NULL;

    if (webInterp == NULL)
	return TCL_ERROR;
    if (webInterp->interp == NULL)
	return TCL_ERROR;

    if (webInterp->dtor == NULL)
	return TCL_OK;

    res = Tcl_ListObjLength(webInterp->interp, webInterp->dtor, &len);
    if (res == TCL_OK) {

	for (i = (len - 1); i >= 0; i--) {

	    /* call finalizers in turn */
	    res =
		Tcl_ListObjIndex(webInterp->interp, webInterp->dtor, i,
				 &tobj);
	    if ((res == TCL_OK) && (tobj != NULL)) {

/*         printf("DBG Finalize: calling \"%s\"\n",Tcl_GetString(tobj)); fflush(stdout); */

		Tcl_IncrRefCount(tobj);
		res = Tcl_EvalObjEx(webInterp->interp, tobj, 0);
		Tcl_DecrRefCount(tobj);

		/* Tcl_ResetResult(webInterp->interp); */

		if (res != TCL_OK) {

/*           fprintf(stderr,"DBG Finalize -- PROBLEM: %s\n",Tcl_GetStringResult(webInterp->interp)); fflush(stderr); */

		    LOG_MSG(webInterp->interp, WRITE_LOG | INTERP_ERRORINFO,
			    __FILE__, __LINE__,
			    "web::finalize", WEBLOG_ERROR,
			    "error evaluating \"", Tcl_GetString(tobj), "\"",
			    NULL);
		    continue;
		}
	    }
	}
/*     printf("DBG Finalize -- done\n"); fflush(stdout); */

    }
    return res;
}