Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
SUSE:SLE-15-SP5:Update
qt6-base
0001-wasm-Proxy-emscripten_fetch-to-the-main-th...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-wasm-Proxy-emscripten_fetch-to-the-main-thread.patch of Package qt6-base
From f2f2b6ef18907a76461b54e110618e7840971fa7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Piotr=20Wierci=C5=84ski?= <piotr.wiercinski@qt.io> Date: Fri, 17 Nov 2023 16:16:38 +0100 Subject: [PATCH] wasm: Proxy emscripten_fetch() to the main thread Calling emscripten_fetch() on worker thread which never yields control back to the browser, will leave the fetch request pending forever. This can be a problematic for example in QML Loader, which tries to load resource by network. Proxy this function call to the main thread, so it can be processed by the browser. Fixes: QTBUG-118225 Pick-to: 6.6 6.5 Change-Id: I969d73f6a66670c4135960e08d2eedc8d2a6e5c3 Reviewed-by: Lorn Potter <lorn.potter@gmail.com> --- src/corelib/kernel/qeventdispatcher_wasm_p.h | 2 +- src/network/access/qnetworkreplywasmimpl.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_wasm_p.h b/src/corelib/kernel/qeventdispatcher_wasm_p.h index 27cf4552e942..564bbffa47ed 100644 --- a/src/corelib/kernel/qeventdispatcher_wasm_p.h +++ b/src/corelib/kernel/qeventdispatcher_wasm_p.h @@ -53,6 +53,7 @@ public: void interrupt() override; void wakeUp() override; + static void runOnMainThreadAsync(std::function<void(void)> fn); static void socketSelect(int timeout, int socket, bool waitForRead, bool waitForWrite, bool *selectForRead, bool *selectForWrite, bool *socketDisconnect); protected: # protected: @@ -90,7 +91,6 @@ private: # static void run(std::function<void(void)> fn); # static void runOnMainThread(std::function<void(void)> fn); # static void runAsync(std::function<void(void)> fn); static void run(std::function<void(void)> fn); static void runAsync(std::function<void(void)> fn); static void runOnMainThread(std::function<void(void)> fn); - static void runOnMainThreadAsync(std::function<void(void)> fn); static QEventDispatcherWasm *g_mainThreadEventDispatcher; diff --git a/src/network/access/qnetworkreplywasmimpl.cpp b/src/network/access/qnetworkreplywasmimpl.cpp index d8190434ccff..f7380a10d9de 100644 --- a/src/network/access/qnetworkreplywasmimpl.cpp +++ b/src/network/access/qnetworkreplywasmimpl.cpp @@ -9,6 +9,7 @@ # #include <QtCore/qcoreapplication.h> # #include <QtCore/qfileinfo.h> # #include <QtCore/qthread.h> #include <QtCore/qfileinfo.h> #include <QtCore/qthread.h> +#include <QtCore/private/qeventdispatcher_wasm_p.h> #include <private/qnetworkaccessmanager_p.h> #include <private/qnetworkfile_p.h> # #include <QtCore/private/qoffsetstringarray_p.h> # #include <QtCore/private/qtools_p.h> # @@ -295,7 +296,10 @@ void QNetworkReplyWasmImplPrivate::doSendRequest() QByteArray destinationPath = dPath.toUtf8(); attr.destinationPath = destinationPath.constData(); - m_fetch = emscripten_fetch(&attr, request.url().toString().toUtf8()); + auto url = request.url().toString().toUtf8(); + QEventDispatcherWasm::runOnMainThreadAsync([attr, url]() mutable { + emscripten_fetch(&attr, url); + }); state = Working; } -- 2.16.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor