void cleanupPool()

in src/generic/interpool.c [699:750]


void cleanupPool(websh_server_conf * conf)
{

    if (conf->webshPool != NULL) {
	Tcl_HashEntry *entry;
	Tcl_HashSearch search;
	WebInterpClass *webInterpClass;
	WebInterp *webInterp, *expiredInterp;
	time_t t;

	time(&t);

	entry = Tcl_FirstHashEntry(conf->webshPool, &search);
	while (entry != NULL) {
	    /* loop through entries */
	    webInterpClass = (WebInterpClass *) Tcl_GetHashValue(entry);

	    webInterp = webInterpClass->first;
	    while (webInterp != NULL) {
		/* NOTE: check on max requests is done by poolReleaseWebInterp */
		if ((webInterp->state) == WIP_FREE) {

		    /* check for expiry */
		    if (webInterpClass->maxidletime
			&& (t - webInterp->lastusedtime) >
			webInterpClass->maxidletime) {
			logToAp(webInterp->interp, NULL,
				"interpreter expired: idle time reached (id %ld, class %s)", webInterp->id, webInterp->interpClass->filename);
			webInterp->state = WIP_EXPIRED;
		    }
		    else {
			if (webInterpClass->maxttl
			    && (t - webInterp->starttime) >
			    webInterpClass->maxttl) {
			    logToAp(webInterp->interp, NULL,
				    "interpreter expired: time to live reached (id %ld, class %s)", webInterp->id, webInterp->interpClass->filename);
			    webInterp->state = WIP_EXPIRED;
			}
		    }
		}
		expiredInterp = webInterp;
		webInterp = webInterp->next;

		if (expiredInterp->state == WIP_EXPIRED)
		    destroyWebInterp(expiredInterp);
	    }
	    entry = Tcl_NextHashEntry(&search);
	}
    }

    return;
}