1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-06 00:13:33 +00:00

Fixed timeout, for child_process.waitExit()

This commit is contained in:
Bryan Roe
2020-05-07 22:19:49 -07:00
parent 7dc8ee4ef4
commit dd0cd1af85
2 changed files with 14 additions and 3 deletions

View File

@@ -162,6 +162,7 @@ duk_ret_t ILibDuktape_ChildProcess_Kill(duk_context *ctx)
}
duk_ret_t ILibDuktape_ChildProcess_waitExit(duk_context *ctx)
{
int timeout = duk_is_number(ctx, 0) ? duk_require_int(ctx, 0) : -1;
void *chain = Duktape_GetChain(ctx);
if (ILibIsChainBeingDestroyed(chain))
{
@@ -178,7 +179,7 @@ duk_ret_t ILibDuktape_ChildProcess_waitExit(duk_context *ctx)
duk_put_prop_string(ctx, -2, "\xFF_WaitExit"); // [spawnedProcess]
void *mods[] = { ILibGetBaseTimer(Duktape_GetChain(ctx)), Duktape_GetPointerProperty(ctx, -1, ILibDuktape_ChildProcess_Manager) };
ILibChain_Continue(chain, (ILibChain_Link**)mods, 2, -1);
ILibChain_Continue(chain, (ILibChain_Link**)mods, 2, timeout);
return(0);
}

View File

@@ -2187,6 +2187,7 @@ ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules,
ILibChain_Link *module;
int slct = 0, vX = 0, mX = 0;
struct timeval tv;
struct timeval startTime;
fd_set readset;
fd_set errorset;
fd_set writeset;
@@ -2198,16 +2199,25 @@ ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules,
root->continuationState = ILibChain_ContinuationState_CONTINUE;
currentNode = root->node;
gettimeofday(&tv, NULL);
gettimeofday(&startTime, NULL);
ILibRemoteLogging_printf(ILibChainGetLogger(chain), ILibRemoteLogging_Modules_Microstack_Generic, ILibRemoteLogging_Flags_VerbosityLevel_1, "ContinueChain...");
while (root->TerminateFlag == 0 && root->continuationState == ILibChain_ContinuationState_CONTINUE)
{
if (maxTimeout > 0)
{
gettimeofday(&tv, NULL);
if (tv.tv_sec < (startTime.tv_sec + maxTimeout / 1000))
{
root->continuationState = ILibChain_ContinuationState_END_CONTINUE;
break;
}
}
slct = 0;
FD_ZERO(&readset);
FD_ZERO(&errorset);
FD_ZERO(&writeset);
tv.tv_sec = UPNP_MAX_WAIT;
tv.tv_sec = maxTimeout < 0 ? UPNP_MAX_WAIT : maxTimeout/1000;
tv.tv_usec = 0;
//