1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-21 10:43:36 +00:00

Updated chain viewer to show timeouts

This commit is contained in:
Bryan Roe
2020-12-09 19:28:15 -08:00
parent 219bb9ece1
commit 64022f804c
2 changed files with 97 additions and 55 deletions

View File

@@ -969,6 +969,7 @@ typedef struct ILibBaseChain
HANDLE WaitHandles[FD_SETSIZE * 2]; HANDLE WaitHandles[FD_SETSIZE * 2];
HANDLE currentHandle; HANDLE currentHandle;
ILibChain_WaitHandleInfo *currentInfo; ILibChain_WaitHandleInfo *currentInfo;
DWORD currentWaitTimeout;
#else #else
pthread_t ChainThreadID; pthread_t ChainThreadID;
int TerminatePipe[2]; int TerminatePipe[2];
@@ -2428,10 +2429,10 @@ ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules,
chain->PreSelectCount++; chain->PreSelectCount++;
#ifdef WIN32 #ifdef WIN32
int x = 0; int x = 0;
DWORD waitTimeout = 0; chain->currentWaitTimeout = 0;
ILibChain_SetupWindowsWaitObject(chain->WaitHandles, &x, &tv, &waitTimeout, &readset, &writeset, &errorset, chain->auxSelectHandles, handles); ILibChain_SetupWindowsWaitObject(chain->WaitHandles, &x, &tv, &(chain->currentWaitTimeout), &readset, &writeset, &errorset, chain->auxSelectHandles, handles);
slct = ILibChain_WindowsSelect(chain, &readset, &writeset, &errorset, chain->WaitHandles, x, waitTimeout); slct = ILibChain_WindowsSelect(chain, &readset, &writeset, &errorset, chain->WaitHandles, x, chain->currentWaitTimeout);
#else #else
slct = select(FD_SETSIZE, &readset, &writeset, &errorset, &tv); slct = select(FD_SETSIZE, &readset, &writeset, &errorset, &tv);
#endif #endif
@@ -3083,7 +3084,6 @@ char *ILibChain_GetMetaDataFromDescriptorSet(void *chain, fd_set *inr, fd_set *i
struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0;
int len = 0; int len = 0;
while (node != NULL && (module = (ILibChain_Link*)ILibLinkedList_GetDataFromNode(node)) != NULL) while (node != NULL && (module = (ILibChain_Link*)ILibLinkedList_GetDataFromNode(node)) != NULL)
{ {
if (module->PreSelectHandler != NULL) if (module->PreSelectHandler != NULL)
@@ -3123,18 +3123,22 @@ char *ILibChain_GetMetaDataFromDescriptorSetEx(void *chain, fd_set *inr, fd_set
#ifdef WIN32 #ifdef WIN32
ILibBaseChain *bchain = (ILibBaseChain*)chain; ILibBaseChain *bchain = (ILibBaseChain*)chain;
#endif #endif
char *retStr = (char*)ILibMemory_SmartAllocate(65535); char *retStr = NULL;
int len = 0; int len = 0;
void *node = ILibLinkedList_GetNode_Head(((ILibBaseChain*)chain)->Links); void *node;
ILibChain_Link *module; ILibChain_Link *module;
fd_set readset; fd_set readset;
fd_set errorset; fd_set errorset;
fd_set writeset; fd_set writeset;
fd_set emptyset; FD_ZERO(&emptyset); fd_set emptyset; FD_ZERO(&emptyset);
int selectTimeout = UPNP_MAX_WAIT * 1000; int selectTimeout = UPNP_MAX_WAIT * 1000;
int f; int f, r;
size_t tmp; size_t tmp;
size_t buflen = 0;
while(1)
{
node = ILibLinkedList_GetNode_Head(((ILibBaseChain*)chain)->Links);
while (node != NULL && (module = (ILibChain_Link*)ILibLinkedList_GetDataFromNode(node)) != NULL) while (node != NULL && (module = (ILibChain_Link*)ILibLinkedList_GetDataFromNode(node)) != NULL)
{ {
if (module->PreSelectHandler != NULL) if (module->PreSelectHandler != NULL)
@@ -3170,7 +3174,15 @@ char *ILibChain_GetMetaDataFromDescriptorSetEx(void *chain, fd_set *inr, fd_set
} }
for (f = 0; f < scount; ++f) for (f = 0; f < scount; ++f)
{ {
len += sprintf_s(retStr + len, ILibMemory_Size(retStr) - len, " FD[%d] (R: %d, W: %d, E: %d) => %s\n", (int)slist[f], FD_ISSET(slist[f], inr), FD_ISSET(slist[f], inw), FD_ISSET(slist[f], ine), ((ILibChain_Link*)module)->QueryHandler != NULL ? ((ILibChain_Link*)module)->QueryHandler(chain, module, (int)slist[f], &tmp) : ((ILibChain_Link*)module)->MetaData); if (retStr == NULL)
{
buflen += snprintf(NULL, 0, " FD[%d] (R: %d, W: %d, E: %d) => %s\n", (int)slist[f], FD_ISSET(slist[f], inr), FD_ISSET(slist[f], inw), FD_ISSET(slist[f], ine), ((ILibChain_Link*)module)->QueryHandler != NULL ? ((ILibChain_Link*)module)->QueryHandler(chain, module, (int)slist[f], &tmp) : ((ILibChain_Link*)module)->MetaData);
}
else
{
(r = sprintf_s(retStr + len, ILibMemory_Size(retStr) - len, " FD[%d] (R: %d, W: %d, E: %d) => %s\n", (int)slist[f], FD_ISSET(slist[f], inr), FD_ISSET(slist[f], inw), FD_ISSET(slist[f], ine), ((ILibChain_Link*)module)->QueryHandler != NULL ? ((ILibChain_Link*)module)->QueryHandler(chain, module, (int)slist[f], &tmp) : ((ILibChain_Link*)module)->MetaData));
if (r > 0) { len += r; }
}
} }
#else #else
@@ -3178,7 +3190,15 @@ char *ILibChain_GetMetaDataFromDescriptorSetEx(void *chain, fd_set *inr, fd_set
{ {
if (FD_ISSET(f, &readset) || FD_ISSET(f, &writeset) || FD_ISSET(f, &errorset)) if (FD_ISSET(f, &readset) || FD_ISSET(f, &writeset) || FD_ISSET(f, &errorset))
{ {
len += sprintf_s(retStr + len, ILibMemory_Size(retStr) - len, " FD[%d] (R: %d, W: %d, E: %d) => %s\n", f, FD_ISSET(f, inr), FD_ISSET(f, inw), FD_ISSET(f, ine), ((ILibChain_Link*)module)->QueryHandler != NULL ? ((ILibChain_Link*)module)->QueryHandler(chain, module, f, &tmp) : ((ILibChain_Link*)module)->MetaData); if (retStr == NULL)
{
buflen += snprintf(NULL, 0, " FD[%d] (R: %d, W: %d, E: %d) => %s\n", f, FD_ISSET(f, inr), FD_ISSET(f, inw), FD_ISSET(f, ine), ((ILibChain_Link*)module)->QueryHandler != NULL ? ((ILibChain_Link*)module)->QueryHandler(chain, module, f, &tmp) : ((ILibChain_Link*)module)->MetaData);
}
else
{
r = sprintf_s(retStr + len, ILibMemory_Size(retStr) - len, " FD[%d] (R: %d, W: %d, E: %d) => %s\n", f, FD_ISSET(f, inr), FD_ISSET(f, inw), FD_ISSET(f, ine), ((ILibChain_Link*)module)->QueryHandler != NULL ? ((ILibChain_Link*)module)->QueryHandler(chain, module, f, &tmp) : ((ILibChain_Link*)module)->MetaData);
if (r > 0) { len += r; }
}
} }
} }
#endif #endif
@@ -3192,10 +3212,32 @@ char *ILibChain_GetMetaDataFromDescriptorSetEx(void *chain, fd_set *inr, fd_set
{ {
if (bchain->WaitHandles[f] != NULL && bchain->WaitHandles[ILibChain_HandleInfoIndex(f)] != NULL) if (bchain->WaitHandles[f] != NULL && bchain->WaitHandles[ILibChain_HandleInfoIndex(f)] != NULL)
{ {
len += sprintf_s(retStr + len, ILibMemory_Size(retStr) - len, " H[%p] (Signaled: %d) => %s\n", bchain->WaitHandles[f], WaitForSingleObjectEx(bchain->WaitHandles[f], 0, FALSE) == 0, ((ILibChain_WaitHandleInfo*)bchain->WaitHandles[ILibChain_HandleInfoIndex(f)])->metaData); if (retStr == NULL)
{
buflen += snprintf(NULL, 0, " H[%p] (Signaled: %d) => %s\n", bchain->WaitHandles[f], WaitForSingleObjectEx(bchain->WaitHandles[f], 0, FALSE) == 0, ((ILibChain_WaitHandleInfo*)bchain->WaitHandles[ILibChain_HandleInfoIndex(f)])->metaData);
}
else
{
r = sprintf_s(retStr + len, ILibMemory_Size(retStr) - len, " H[%p] (Signaled: %d) => %s\n", bchain->WaitHandles[f], WaitForSingleObjectEx(bchain->WaitHandles[f], 0, FALSE) == 0, ((ILibChain_WaitHandleInfo*)bchain->WaitHandles[ILibChain_HandleInfoIndex(f)])->metaData);
if (r > 0) { len += r; }
}
} }
} }
#endif #endif
if (retStr == NULL)
{
retStr = ILibMemory_SmartAllocate(buflen + 1024);
#ifdef WIN32
len += sprintf_s(retStr, ILibMemory_Size(retStr), " Chain Timeout: %u milliseconds\n", bchain->currentWaitTimeout);
#else
len += sprintf_s(retStr, ILibMemory_Size(retStr), " Chain Timeout: %u milliseconds\n", selectTimeout);
#endif
}
else
{
break;
}
}
retStr[len] = 0; retStr[len] = 0;
return(retStr); return(retStr);
@@ -3782,11 +3824,11 @@ ILibExportMethod void ILibStartChain(void *Chain)
chain->PreSelectCount++; chain->PreSelectCount++;
#ifdef WIN32 #ifdef WIN32
int x = 0; int x = 0;
DWORD waitTimeout = 0; chain->currentWaitTimeout = 0;
ILibChain_SetupWindowsWaitObject(chain->WaitHandles, &x, &tv, &waitTimeout, &readset, &writeset, &errorset, chain->auxSelectHandles, NULL); ILibChain_SetupWindowsWaitObject(chain->WaitHandles, &x, &tv, &(chain->currentWaitTimeout), &readset, &writeset, &errorset, chain->auxSelectHandles, NULL);
chain->lastDescriptorCount = x; chain->lastDescriptorCount = x;
slct = ILibChain_WindowsSelect(chain, &readset, &writeset, &errorset, chain->WaitHandles, x, waitTimeout); slct = ILibChain_WindowsSelect(chain, &readset, &writeset, &errorset, chain->WaitHandles, x, chain->currentWaitTimeout);
#else #else
if (chain->lastDescriptorCount < 0) if (chain->lastDescriptorCount < 0)
{ {