int ipc_fitupdate(void) { int ret; debug_message("ipc_fitupdate with %s\n", fit_callback); ret = Tcl_Eval(fit_interp, fit_callback); if (ret == TCL_OK) { Tcl_ResetResult(fit_interp); /* XXX FIXME XXX if fit speed improves, we may not want to evaluate * this every time --- leave it to the fit_callback code to decide? */ flushqueue(); } else { failure = 1; stopFit(0); } return TCL_OK; }
static void ventiserver(void *v) { Packet *p; VtReq *r; char err[ERRMAX]; uint ms; int cached, ok; USED(v); threadsetname("ventiserver"); trace(TraceWork, "start"); while((r = vtgetreq(ventisrv)) != nil){ trace(TraceWork, "finish"); trace(TraceWork, "start request %F", &r->tx); trace(TraceRpc, "<- %F", &r->tx); r->rx.msgtype = r->tx.msgtype+1; addstat(StatRpcTotal, 1); if(0) print("req (arenas[0]=%p sects[0]=%p) %F\n", mainindex->arenas[0], mainindex->sects[0], &r->tx); switch(r->tx.msgtype){ default: vtrerror(r, "unknown request"); break; case VtTread: ms = msec(); r->rx.data = readlump(r->tx.score, r->tx.blocktype, r->tx.count, &cached); ms = msec() - ms; addstat2(StatRpcRead, 1, StatRpcReadTime, ms); if(r->rx.data == nil){ addstat(StatRpcReadFail, 1); rerrstr(err, sizeof err); vtrerror(r, err); }else{ addstat(StatRpcReadBytes, packetsize(r->rx.data)); addstat(StatRpcReadOk, 1); if(cached) addstat2(StatRpcReadCached, 1, StatRpcReadCachedTime, ms); else addstat2(StatRpcReadUncached, 1, StatRpcReadUncachedTime, ms); } break; case VtTwrite: if(readonly){ vtrerror(r, "read only"); break; } p = r->tx.data; r->tx.data = nil; addstat(StatRpcWriteBytes, packetsize(p)); ms = msec(); ok = writelump(p, r->rx.score, r->tx.blocktype, 0, ms); ms = msec() - ms; addstat2(StatRpcWrite, 1, StatRpcWriteTime, ms); if(ok < 0){ addstat(StatRpcWriteFail, 1); rerrstr(err, sizeof err); vtrerror(r, err); } break; case VtTsync: flushqueue(); flushdcache(); break; } trace(TraceRpc, "-> %F", &r->rx); vtrespond(r); trace(TraceWork, "start"); } flushdcache(); flushicache(); threadexitsall(0); }