Merge pull request #11962 from mfleisz/fix-pollset-yield

[winpr,synch] Fix starvation in pollset_poll caused by emscripten_sleep
This commit is contained in:
MartinHaimberger
2025-10-28 14:38:23 +01:00
committed by GitHub
2 changed files with 14 additions and 2 deletions

View File

@@ -148,9 +148,18 @@ int pollset_poll(WINPR_POLL_SET* set, DWORD dwMilliseconds)
if (ret >= 0)
{
#if defined(__EMSCRIPTEN__)
/* Yield in emscripten so event handlers can be processed */
/* If we have tried 10 times unsuccessfully we will yield in emscripten so pending event
* handlers might be run */
if (ret == 0)
emscripten_sleep(0);
{
if (++set->yieldCounter > 10)
{
emscripten_sleep(0);
set->yieldCounter = 0;
}
}
else
set->yieldCounter = 0;
#endif
return ret;
}

View File

@@ -55,6 +55,9 @@ struct winpr_poll_set
#endif
size_t fillIndex;
size_t size;
#if defined(__EMSCRIPTEN__)
size_t yieldCounter;
#endif
};
typedef struct winpr_poll_set WINPR_POLL_SET;