1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-16 16:23:25 +00:00

Added cleanup for signal descriptor

This commit is contained in:
Bryan Roe
2019-02-20 16:02:37 -08:00
parent f6762fd724
commit 32f8179137

View File

@@ -851,6 +851,16 @@ void ILibDuktape_ScriptContainer_Process_SignalListener_PostSelect(void* object,
break; break;
} }
} }
else if(bytesRead == 0 || (errno != EAGAIN && errno != EWOULDBLOCK))
{
close(SignalDescriptors[0]);
close(SignalDescriptors[1]);
if (pipe(SignalDescriptors) == 0)
{
fcntl(SignalDescriptors[0], F_SETFL, O_NONBLOCK);
fcntl(SignalDescriptors[1], F_SETFL, O_NONBLOCK);
}
}
} }
} }
void ILibDuktape_ScriptContainer_Process_SignalListener(int signum) void ILibDuktape_ScriptContainer_Process_SignalListener(int signum)
@@ -860,6 +870,18 @@ void ILibDuktape_ScriptContainer_Process_SignalListener(int signum)
ignore_result(write(SignalDescriptors[1], &signum, sizeof(signum))); ignore_result(write(SignalDescriptors[1], &signum, sizeof(signum)));
} }
} }
void ILibDuktape_ScriptContainer_Process_SignalListener_Destroy(void *object)
{
if (SignalDescriptors[0] != 0)
{
close(SignalDescriptors[0]);
}
if (SignalDescriptors[1] != 0)
{
close(SignalDescriptors[1]);
}
SignalDescriptors[0] = SignalDescriptors[1] = 0;
}
#endif #endif
void ILibDuktape_ScriptContainer_Process_Init(duk_context *ctx, char **argList) void ILibDuktape_ScriptContainer_Process_Init(duk_context *ctx, char **argList)
@@ -967,6 +989,7 @@ void ILibDuktape_ScriptContainer_Process_Init(duk_context *ctx, char **argList)
k->MetaData = "Signal_Listener"; k->MetaData = "Signal_Listener";
k->PreSelectHandler = ILibDuktape_ScriptContainer_Process_SignalListener_PreSelect; k->PreSelectHandler = ILibDuktape_ScriptContainer_Process_SignalListener_PreSelect;
k->PostSelectHandler = ILibDuktape_ScriptContainer_Process_SignalListener_PostSelect; k->PostSelectHandler = ILibDuktape_ScriptContainer_Process_SignalListener_PostSelect;
k->DestroyHandler = ILibDuktape_ScriptContainer_Process_SignalListener_Destroy;
ILibAddToChain(chain, k); ILibAddToChain(chain, k);
signal(SIGTERM, ILibDuktape_ScriptContainer_Process_SignalListener); signal(SIGTERM, ILibDuktape_ScriptContainer_Process_SignalListener);