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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user