bool gotReplyWrapperxd ( void *state ) { // grab it XmlDoc *xd = (XmlDoc *)state; // get it UdpSlot *slot = (UdpSlot *)xd->m_slot; // parse the request Msg20Request *req = (Msg20Request *)slot->m_readBuf; // print time long long took = gettimeofdayInMilliseconds() - xd->m_setTime; // if there is a baclkog of msg20 summary generation requests this // is really not the cpu it took to make the smmary, but how long it // took to get the reply. this request might have had to wait for the // other summaries to finish computing before it got its turn, // meanwhile its clock was ticking. TODO: make this better? // only do for niceness 0 otherwise it gets interrupted by quickpoll // and can take a long time. if ( (req->m_isDebug || took > 100) && req->m_niceness == 0 ) log("query: Took %lli ms to compute summary for d=%lli u=%s " "niceness=%li", took, xd->m_docId,xd->m_firstUrl.m_url, xd->m_niceness ); // error? if ( g_errno ) { xd->m_reply.sendReply ( xd ); return true; } // this should not block now Msg20Reply *reply = xd->getMsg20Reply ( ); // sanity check, should not block here now if ( reply == (void *)-1 ) { char *xx=NULL;*xx=0; } // NULL means error, -1 means blocked. on error g_errno should be set if ( ! reply && ! g_errno ) { char *xx=NULL;*xx=0;} // send it off. will send an error reply if g_errno is set return reply->sendReply ( xd ); }
bool gotReplyWrapperxd(void *state_) { Msg20State *state = static_cast<Msg20State*>(state_); // print time int64_t now = gettimeofdayInMilliseconds(); int64_t took = now - state->m_xmldoc.m_setTime; int64_t took2 = 0; if ( state->m_xmldoc.m_cpuSummaryStartTime) { took2 = now - state->m_xmldoc.m_cpuSummaryStartTime; } // if there is a baclkog of msg20 summary generation requests this // is really not the cpu it took to make the smmary, but how long it // took to get the reply. this request might have had to wait for the // other summaries to finish computing before it got its turn, // meanwhile its clock was ticking. TODO: make this better? // only do for niceness 0 otherwise it gets interrupted by quickpoll // and can take a int32_t time. if ( state->m_req->m_niceness == 0 && (state->m_req->m_isDebug || took > 100 || took2 > 100 ) ) { log(LOG_TIMING, "query: Took %" PRId64" ms (total=%" PRId64" ms) to compute summary for d=%" PRId64" " "u=%s status=%s q=%s", took2, took, state->m_xmldoc.m_docId, state->m_xmldoc.m_firstUrl.getUrl(), mstrerror(g_errno), state->m_req->ptr_qbuf); } // error? if ( g_errno ) { state->m_xmldoc.m_reply.sendReply(state); return true; } // this should not block now Msg20Reply *reply = state->m_xmldoc.getMsg20Reply(); // sanity check, should not block here now if ( reply == (void *)-1 ) { g_process.shutdownAbort(true); } // NULL means error, -1 means blocked. on error g_errno should be set if ( ! reply && ! g_errno ) { g_process.shutdownAbort(true);} // send it off. will send an error reply if g_errno is set return reply->sendReply(state); }