diff --git a/change/react-native-windows-430100b8-4f19-4354-90b8-48658475a668.json b/change/react-native-windows-430100b8-4f19-4354-90b8-48658475a668.json new file mode 100644 index 00000000000..16887e8df1d --- /dev/null +++ b/change/react-native-windows-430100b8-4f19-4354-90b8-48658475a668.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "fix for watson", + "packageName": "react-native-windows", + "email": "hmalothu@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/vnext/Mso/src/dispatchQueue/threadPoolScheduler_win.cpp b/vnext/Mso/src/dispatchQueue/threadPoolScheduler_win.cpp index 47ac1151d37..29b64d596f5 100644 --- a/vnext/Mso/src/dispatchQueue/threadPoolScheduler_win.cpp +++ b/vnext/Mso/src/dispatchQueue/threadPoolScheduler_win.cpp @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. +#include // For std::runtime_error #include #include "dispatchQueue/dispatchQueue.h" #include "queueService.h" @@ -14,7 +15,7 @@ struct ThreadPoolWorkDeleter { }; struct ThreadPoolSchedulerWin : Mso::UnknownObject { - ThreadPoolSchedulerWin(uint32_t maxThreads) noexcept; + ThreadPoolSchedulerWin(uint32_t maxThreads); ~ThreadPoolSchedulerWin() noexcept override; static void __stdcall WorkCallback( @@ -93,9 +94,17 @@ std::mutex ThreadPoolSchedulerWin::s_threadPoolWorkMutex; bool ThreadPoolSchedulerWin::s_enableThreadPoolWorkTracking{false}; std::vector> ThreadPoolSchedulerWin::s_trackedThreadPoolWork; -ThreadPoolSchedulerWin::ThreadPoolSchedulerWin(uint32_t maxThreads) noexcept - : m_threadPoolWork{::CreateThreadpoolWork(WorkCallback, this, nullptr), ThreadPoolWorkDeleter{}}, - m_maxThreads{maxThreads == 0 ? MaxConcurrentThreads : maxThreads} { +ThreadPoolSchedulerWin::ThreadPoolSchedulerWin(uint32_t maxThreads) + : m_maxThreads{maxThreads == 0 ? MaxConcurrentThreads : maxThreads} { + // Create thread pool work + TP_WORK *tpWork = ::CreateThreadpoolWork(WorkCallback, this, nullptr); + + // Throw immediately if creation failed + if (!tpWork) { + throw std::runtime_error("Failed to create thread pool work"); + } + + m_threadPoolWork = std::shared_ptr(tpWork, ThreadPoolWorkDeleter{}); TrackThreadPoolWork(m_threadPoolWork); }