Removed un-needed function overload for setting userdata
Fixed bugs in win64 impl where it did not check if the process was a known invalid value
This commit is contained in:
@@ -142,9 +142,6 @@ void uniproc_await_any_processes(const uniproc_process* p, const size_t num_proc
|
||||
waitpid(0, nullptr, WIFEXITED | WIFSIGNALED | WCOREDUMP);
|
||||
}
|
||||
|
||||
void uniproc_set_userdata(uniproc_process* p, const uint64_t userdata)
|
||||
{ p->userdata = userdata; }
|
||||
|
||||
void uniproc_set_userdata(uniproc_process * p, void const* userdata)
|
||||
{ p->userdata = (uint64_t)userdata; }
|
||||
|
||||
|
||||
@@ -150,20 +150,29 @@ uniproc_process uniproc_create_process(const char* cmd, const size_t num_args, c
|
||||
|
||||
void uniproc_await_processes(uniproc_process* p, int* return_codes, size_t num_processes)
|
||||
{
|
||||
size_t num_valid_handles = 0;
|
||||
HANDLE* h = (HANDLE*)malloc(num_processes*sizeof(HANDLE));
|
||||
for (size_t i = 0; i < num_processes; ++i)
|
||||
{
|
||||
if (uniproc_is_process_null(p + i)) continue;
|
||||
h[i] = (HANDLE)p[i]._proc_hdl;
|
||||
num_valid_handles++;
|
||||
}
|
||||
|
||||
WaitForMultipleObjects(num_processes, h, 1, INFINITE);
|
||||
WaitForMultipleObjects(num_valid_handles, h, 1, INFINITE);
|
||||
free(h);
|
||||
|
||||
if (return_codes == NULL) return;
|
||||
for (size_t i = 0; i < num_processes; ++i)
|
||||
GetExitCodeProcess((HANDLE)p[i]._proc_hdl, (LPDWORD)(return_codes+i));
|
||||
{
|
||||
if (uniproc_is_process_null(p + i)) continue;
|
||||
GetExitCodeProcess((HANDLE)p[i]._proc_hdl, (LPDWORD)(return_codes + i));
|
||||
}
|
||||
}
|
||||
|
||||
void uniproc_close_process(uniproc_process* p)
|
||||
{
|
||||
if (uniproc_is_process_null(p)) return;
|
||||
TerminateProcess((HANDLE)p->_proc_hdl, 2);
|
||||
CloseHandle((HANDLE)p->_proc_hdl);
|
||||
fclose(p->in);
|
||||
@@ -175,9 +184,16 @@ void uniproc_close_process(uniproc_process* p)
|
||||
bool uniproc_are_processes_finished(const uniproc_process* p, const size_t num_processes)
|
||||
{
|
||||
HANDLE* h = (HANDLE*)malloc(num_processes*sizeof(HANDLE));
|
||||
DWORD ret = WaitForMultipleObjects(num_processes, h, true, 0);
|
||||
size_t num_valid_handles = 0;
|
||||
for (size_t i = 0; i < num_processes; ++i)
|
||||
{
|
||||
if (uniproc_is_process_null(p + i)) continue;
|
||||
h[i] = (HANDLE)p[i]._proc_hdl;
|
||||
num_valid_handles++;
|
||||
}
|
||||
DWORD ret = WaitForMultipleObjects(num_valid_handles, h, true, 0);
|
||||
free(h);
|
||||
return ret >= WAIT_OBJECT_0 && ret < WAIT_OBJECT_0 + num_processes;
|
||||
return ret >= WAIT_OBJECT_0 && ret < WAIT_OBJECT_0 + num_valid_handles;
|
||||
}
|
||||
|
||||
void uniproc_nullify_processes(uniproc_process* p, const size_t num_processes)
|
||||
@@ -189,13 +205,17 @@ void uniproc_is_process_null(const uniproc_process* p)
|
||||
void uniproc_await_any_processes(const uniproc_process* p, const size_t num_processes)
|
||||
{
|
||||
HANDLE* h = (HANDLE*)malloc(num_processes * sizeof(HANDLE));
|
||||
WaitForMultipleObjects(num_processes, h, false, INFINITE);
|
||||
size_t num_valid_handles = 0;
|
||||
for (size_t i = 0; i < num_processes; ++i)
|
||||
{
|
||||
if (uniproc_is_process_null(p + i)) continue;
|
||||
h[i] = (HANDLE)p[i]._proc_hdl;
|
||||
num_valid_handles++;
|
||||
}
|
||||
WaitForMultipleObjects(num_valid_handles, h, false, INFINITE);
|
||||
free(h);
|
||||
}
|
||||
|
||||
void uniproc_set_userdata(uniproc_process* p, const uint64_t userdata)
|
||||
{ p->userdata = userdata; }
|
||||
|
||||
void uniproc_set_userdata(uniproc_process * p, void const* userdata)
|
||||
{ p->userdata = (uint64_t)userdata; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user