Hi Tyler, 2022-03-09 23:35 (UTC-0800), Tyler Retzlaff: > create lcore worker threads suspended and then subsequently resume to > allow &lcore_config[i].thread_id be stored before eal_thread_loop > execution. > > Fixes: 53ffd9f080fc ("eal/windows: add minimum viable code") > Cc: anand.ra...@intel.com > Cc: sta...@dpdk.org > > Signed-off-by: Tyler Retzlaff <roret...@linux.microsoft.com>
Acked-by: Dmitry Kozlyuk <dmitry.kozl...@gmail.com> It takes some effort to correlate &lcore_config[i].thread_id with the code in the patch and knowledge of CreateThread() to understand the root cause. I suggest prepending an explanation to your commit message: eal_thread_loop() uses lcore_config[i].thread_id, which is stored upon the return from CreateThread(). Per documentation, eal_thread_loop() can start before CreateThread() returns and the ID is stored. > --- > lib/eal/windows/eal_thread.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/lib/eal/windows/eal_thread.c b/lib/eal/windows/eal_thread.c > index 54fa93f..ff84cb4 100644 > --- a/lib/eal/windows/eal_thread.c > +++ b/lib/eal/windows/eal_thread.c > @@ -150,13 +150,18 @@ > > th = CreateThread(NULL, 0, > (LPTHREAD_START_ROUTINE)(ULONG_PTR)eal_thread_loop, > - NULL, 0, (LPDWORD)thread); > + NULL, CREATE_SUSPENDED, > (LPDWORD)thread); > if (!th) > return -1; > > SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); > SetThreadPriority(th, THREAD_PRIORITY_NORMAL); > > + if (ResumeThread(th) == (DWORD)-1) { > + (void)CloseHandle(th); > + return -1; > + } > + > return 0; > } >