Skip to content

Commit

Permalink
[HTTP] change start time and current time for timeout to monotonic
Browse files Browse the repository at this point in the history
  • Loading branch information
moniwe authored and azoitl committed Mar 24, 2024
1 parent 38049e0 commit c148186
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 8 deletions.
10 changes: 4 additions & 6 deletions src/com/HTTP/http_handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ forte::com_infra::EComResponse CHTTP_Handler::recvData(const void *paData, unsig
CCriticalRegion criticalRegion(mAcceptedMutex);
HTTPAcceptedSockets *accepted = new HTTPAcceptedSockets();
accepted->mSocket = newConnection;
accepted->mStartTime = func_NOW();
accepted->mStartTime = func_NOW_MONOTONIC();
mAcceptedSockets.pushBack(accepted);
getExtEvHandler<CIPComSocketHandler>().addComCallback(newConnection, this);
resumeSelfsuspend();
Expand Down Expand Up @@ -250,7 +250,7 @@ bool CHTTP_Handler::sendClientData(forte::com_infra::CHttpComLayer *paLayer, con
HTTPClientWaiting *toAdd = new HTTPClientWaiting();
toAdd->mLayer = paLayer;
toAdd->mSocket = newSocket;
toAdd->mStartTime = func_NOW();
toAdd->mStartTime = func_NOW_MONOTONIC();
startTimeoutThread();
mClientLayers.pushBack(toAdd);
getExtEvHandler<CIPComSocketHandler>().addComCallback(newSocket, this);
Expand Down Expand Up @@ -346,8 +346,7 @@ void CHTTP_Handler::checkClientLayers() {
CSinglyLinkedList<HTTPClientWaiting*> clientsToDelete;
for(CSinglyLinkedList<HTTPClientWaiting*>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter) {
// wait until result is ready
CIEC_DATE_AND_TIME currentTime(func_NOW());
if(currentTime.getMilliSeconds() - (*iter)->mStartTime.getMilliSeconds() > scmSendTimeout * 1000) {
if(func_NOW_MONOTONIC().getInMilliSeconds() > (*iter)->mStartTime.getInMilliSeconds() + scmSendTimeout * 1000) {
DEVLOG_ERROR("[HTTP Handler]: Timeout at client %s:%u \n", (*iter)->mLayer->getHost().c_str(), (*iter)->mLayer->getPort());
removeAndCloseSocket((*iter)->mSocket);
clientsToDelete.pushBack(*iter);
Expand All @@ -372,8 +371,7 @@ void CHTTP_Handler::checkAcceptedSockets() {
CSinglyLinkedList<HTTPAcceptedSockets*> acceptedToDelete;
for(CSinglyLinkedList<HTTPAcceptedSockets*>::Iterator iter = mAcceptedSockets.begin(); iter != mAcceptedSockets.end(); ++iter) {
// wait until result is ready
CIEC_DATE_AND_TIME currentTime(func_NOW());
if(currentTime.getMilliSeconds() - (*iter)->mStartTime.getMilliSeconds() > scmAcceptedTimeout * 1000) {
if(func_NOW_MONOTONIC().getInMilliSeconds() > (*iter)->mStartTime.getInMilliSeconds() + scmAcceptedTimeout * 1000) {
DEVLOG_ERROR("[HTTP Handler]: Timeout at accepted socket\n");
removeAndCloseSocket((*iter)->mSocket);
acceptedToDelete.pushBack(*iter);
Expand Down
4 changes: 2 additions & 2 deletions src/com/HTTP/http_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,12 @@ class CHTTP_Handler : public CExternalEventHandler, public CThread, public forte
struct HTTPClientWaiting {
forte::com_infra::CHttpComLayer* mLayer;
CIPComSocketHandler::TSocketDescriptor mSocket;
CIEC_DATE_AND_TIME mStartTime;
CIEC_TIME mStartTime;
};

struct HTTPAcceptedSockets {
CIPComSocketHandler::TSocketDescriptor mSocket;
CIEC_DATE_AND_TIME mStartTime;
CIEC_TIME mStartTime;
};

CSinglyLinkedList<HTTPServerWaiting*> mServerLayers;
Expand Down

0 comments on commit c148186

Please sign in to comment.