mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-15 15:53:55 +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)
|
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);
|
void *chain = Duktape_GetChain(ctx);
|
||||||
if (ILibIsChainBeingDestroyed(chain))
|
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]
|
duk_put_prop_string(ctx, -2, "\xFF_WaitExit"); // [spawnedProcess]
|
||||||
|
|
||||||
void *mods[] = { ILibGetBaseTimer(Duktape_GetChain(ctx)), Duktape_GetPointerProperty(ctx, -1, ILibDuktape_ChildProcess_Manager) };
|
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);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2187,6 +2187,7 @@ ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules,
|
|||||||
ILibChain_Link *module;
|
ILibChain_Link *module;
|
||||||
int slct = 0, vX = 0, mX = 0;
|
int slct = 0, vX = 0, mX = 0;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
struct timeval startTime;
|
||||||
fd_set readset;
|
fd_set readset;
|
||||||
fd_set errorset;
|
fd_set errorset;
|
||||||
fd_set writeset;
|
fd_set writeset;
|
||||||
@@ -2198,16 +2199,25 @@ ILibExportMethod void ILibChain_Continue(void *Chain, ILibChain_Link **modules,
|
|||||||
root->continuationState = ILibChain_ContinuationState_CONTINUE;
|
root->continuationState = ILibChain_ContinuationState_CONTINUE;
|
||||||
currentNode = root->node;
|
currentNode = root->node;
|
||||||
|
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&startTime, NULL);
|
||||||
ILibRemoteLogging_printf(ILibChainGetLogger(chain), ILibRemoteLogging_Modules_Microstack_Generic, ILibRemoteLogging_Flags_VerbosityLevel_1, "ContinueChain...");
|
ILibRemoteLogging_printf(ILibChainGetLogger(chain), ILibRemoteLogging_Modules_Microstack_Generic, ILibRemoteLogging_Flags_VerbosityLevel_1, "ContinueChain...");
|
||||||
|
|
||||||
while (root->TerminateFlag == 0 && root->continuationState == ILibChain_ContinuationState_CONTINUE)
|
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;
|
slct = 0;
|
||||||
FD_ZERO(&readset);
|
FD_ZERO(&readset);
|
||||||
FD_ZERO(&errorset);
|
FD_ZERO(&errorset);
|
||||||
FD_ZERO(&writeset);
|
FD_ZERO(&writeset);
|
||||||
tv.tv_sec = UPNP_MAX_WAIT;
|
tv.tv_sec = maxTimeout < 0 ? UPNP_MAX_WAIT : maxTimeout/1000;
|
||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user