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:
2025-03-06 15:54:50 +11:00
parent 12cc5bd38e
commit 500fe17076
3 changed files with 28 additions and 12 deletions

View File

@@ -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; }