void HttpConnection::io(Socket *, int revents) { TRACE("io(revents=%04x) isHandlingRequest:%d", revents, flags_ & IsHandlingRequest); ref(); if (revents & ev::ERROR) { log(Severity::error, "Potential bug in connection I/O watching. Closing."); abort(); goto done; } if ((revents & Socket::Read) && !readSome()) goto done; if ((revents & Socket::Write) && !writeSome()) goto done; if (!process()) goto done; switch (status()) { case ReadingRequest: watchInput(worker_->server_.maxReadIdle()); break; case KeepAliveRead: watchInput(worker_->server_.maxKeepAlive()); default: break; } done: unref(); }
void HttpConnection::io(Socket *, int revents) { TRACE(1, "io(revents=%04x) isHandlingRequest:%d", revents, isHandlingRequest()); ref(); if (revents & ev::ERROR) { log(Severity::error, "Potential bug in connection I/O watching. Closing."); abort(); goto done; } // socket is ready for read? if ((revents & Socket::Read) && !readSome()) goto done; // socket is ready for write? if ((revents & Socket::Write) && !writeSome()) goto done; switch (status()) { case ReadingRequest: TRACE(1, "io(): status=%s. Watch for read.", status_str()); watchInput(worker_->server_.maxReadIdle()); break; case KeepAliveRead: if (isInputPending()) { do { // we're in keep-alive state but have (partial) request in buffer pending // so do process it right away TRACE(1, "io(): status=%s. Pipelined input pending.", status_str()); process(); } while (isInputPending() && status() == KeepAliveRead); if (status() == KeepAliveRead) { // we're still in keep-alive state but no (partial) request in buffer pending // so watch for socket input event. TRACE(1, "io(): status=%s. Watch for read (keep-alive).", status_str()); watchInput(worker_->server_.maxKeepAlive()); } } else { // we are in keep-alive state and have no (partial) request in buffer pending // so watch for socket input event. TRACE(1, "io(): status=%s. Watch for read (keep-alive).", status_str()); watchInput(worker_->server_.maxKeepAlive()); } break; case ProcessingRequest: case SendingReplyDone: case SendingReply: case Undefined: // should never be reached TRACE(1, "io(): status=%s. Do not touch I/O watcher.", status_str()); break; } done: unref(); }
void HttpProxy::ProxyConnection::io(Socket* s, int revents) { TRACE("io(0x%04x)", revents); if (revents & Socket::Read) readSome(); if (revents & Socket::Write) writeSome(); }
void ErrorTestObject::test<3>() // error type string in output { writeSome(); ensure_message_contains(0, "DEBUG: "); ensure_message_contains(1, "INFO: "); ensure_message_contains(2, "WARNING: "); ensure_message_does_not_contain(3, "ERROR"); ensure_message_contains(4, "ERROR: "); ensure_message_count(5); }
void HttpConnection::flush() { if (!isOutputPending()) return; #if defined(ENABLE_OPPORTUNISTIC_WRITE) writeSome(); #else watchOutput(); #endif }
void ErrorTestObject::test<2>() // messages are filtered based on default level { LLError::setDefaultLevel(LLError::LEVEL_DEBUG); writeSome(); ensure_message_contains(0, "one"); ensure_message_contains(1, "two"); ensure_message_contains(2, "three"); ensure_message_contains(3, "error"); ensure_message_contains(4, "four"); ensure_message_count(5); LLError::setDefaultLevel(LLError::LEVEL_INFO); writeSome(); ensure_message_contains(5, "two"); ensure_message_contains(6, "three"); ensure_message_contains(7, "error"); ensure_message_contains(8, "four"); ensure_message_count(9); LLError::setDefaultLevel(LLError::LEVEL_WARN); writeSome(); ensure_message_contains(9, "three"); ensure_message_contains(10, "error"); ensure_message_contains(11, "four"); ensure_message_count(12); LLError::setDefaultLevel(LLError::LEVEL_ERROR); writeSome(); ensure_message_contains(12, "error"); ensure_message_contains(13, "four"); ensure_message_count(14); LLError::setDefaultLevel(LLError::LEVEL_NONE); writeSome(); ensure_message_count(14); }
// Spike logic is driven by TrgSpikeParams: // {periEvtSecs, refractSecs, inarow, nS, T}. // Corresponding states defined above. // void TrigSpike::run() { Debug() << "Trigger thread started."; setYieldPeriod_ms( 100 ); initState(); while( !isStopped() ) { double loopT = getTime(); bool inactive; // ------- // Active? // ------- inactive = ISSTATE_Done || !isGateHi(); if( inactive ) goto next_loop; // ------------- // If gate start // ------------- // Set gateHiT as place from which to start // searching for edge in getEdge(). if( !imCnt.edgeCt || !niCnt.edgeCt ) { usrFlt->reset(); double gateT = getGateHiT(); if( imQ && !imQ->mapTime2Ct( imCnt.edgeCt, gateT ) ) goto next_loop; if( niQ && !niQ->mapTime2Ct( niCnt.edgeCt, gateT ) ) goto next_loop; } // -------------- // Seek next edge // -------------- if( ISSTATE_GetEdge ) { if( p.trgSpike.stream == "imec" ) { if( !getEdge( imCnt, imQ, niCnt, niQ ) ) goto next_loop; } else { if( !getEdge( niCnt, niQ, imCnt, imQ ) ) goto next_loop; } QMetaObject::invokeMethod( gw, "blinkTrigger", Qt::QueuedConnection ); // --------------- // Start new files // --------------- imCnt.remCt = -1; niCnt.remCt = -1; { int ig, it; if( !newTrig( ig, it, false ) ) break; setSyncWriteMode(); } SETSTATE_Write(); } // ---------------- // Handle this edge // ---------------- if( ISSTATE_Write ) { if( !writeSome( DstImec, imQ, imCnt ) || !writeSome( DstNidq, niQ, niCnt ) ) { break; } // ----- // Done? // ----- if( imCnt.remCt <= 0 && niCnt.remCt <= 0 ) { endTrig(); usrFlt->reset(); imCnt.edgeCt += imCnt.refracCt; niCnt.edgeCt += niCnt.refracCt; if( ++nS >= nCycMax ) SETSTATE_Done; else SETSTATE_GetEdge; } } // ------ // Status // ------ next_loop: if( loopT - statusT > 0.25 ) { QString sOn, sWr; int ig, it; getGT( ig, it ); statusOnSince( sOn, loopT, ig, it ); statusWrPerf( sWr ); Status() << sOn << sWr; statusT = loopT; } // ------------------- // Moderate fetch rate // ------------------- yield( loopT ); } endRun(); Debug() << "Trigger thread stopped."; emit finished(); }