Demonstrate that Embind is not multi-threading capable
Enabling the line commented out with "TODO" in embindtest.js would fail with something like > Aborted(Assertion failed: invalid handle: 8) > worker.js onmessage() captured an uncaught exception: RuntimeError: unreachable > RuntimeError: unreachable > at soffice.wasm.__trap (http://localhost:6931/soffice.wasm:wasm-function[446445]:0x8f952b3) > at ___trap (blob:http://localhost:6931/7e945427-df90-49c0-a2b5-28c5ecfbe1a5:16657:54) > at abort (blob:http://localhost:6931/7e945427-df90-49c0-a2b5-28c5ecfbe1a5:1091:5) > at assert (blob:http://localhost:6931/7e945427-df90-49c0-a2b5-28c5ecfbe1a5:731:5) > at HandleAllocator.get (blob:http://localhost:6931/7e945427-df90-49c0-a2b5-28c5ecfbe1a5:7212:11) > at Object.toValue (blob:http://localhost:6931/7e945427-df90-49c0-a2b5-28c5ecfbe1a5:7270:30) > at __emval_call_void_method (blob:http://localhost:6931/7e945427-df90-49c0-a2b5-28c5ecfbe1a5:10183:22) > at soffice.wasm.the_wrappers::com::sun:⭐:task::XJobExecutor::trigger(rtl::OUString const&) (http://localhost:6931/soffice.wasm:wasm-function[77042]:0xafbb24) > at soffice.wasm.(anonymous namespace)::JobExecutorThread::execute() (http://localhost:6931/soffice.wasm:wasm-function[243534]:0x43250b5) > at soffice.wasm.non-virtual thunk to salhelper::Thread::run() (http://localhost:6931/soffice.wasm:wasm-function[87641]:0xdff5cf) Change-Id: I4e35dc19c5c0f97de7158bf9c07fd31716ffff84 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173132 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
This commit is contained in:
parent
a781e5ad35
commit
b418f3d8d3
3 changed files with 30 additions and 5 deletions
|
@ -129,7 +129,7 @@ interface XTest {
|
|||
[out] XTest value18);
|
||||
void throwRuntimeException();
|
||||
void passJob([in] com::sun::star::task::XJob object);
|
||||
void passJobExecutor([in] com::sun::star::task::XJobExecutor object);
|
||||
void passJobExecutor([in] com::sun::star::task::XJobExecutor object, [in] boolean newThread);
|
||||
void passInterface([in] com::sun::star::uno::XInterface object);
|
||||
boolean checkAttributes([in] org::libreoffice::embindtest::XAttributes object);
|
||||
[attribute] string StringAttribute;
|
||||
|
|
|
@ -67,6 +67,21 @@ private:
|
|||
}
|
||||
};
|
||||
|
||||
class JobExecutorThread : public salhelper::Thread
|
||||
{
|
||||
public:
|
||||
JobExecutorThread(css::uno::Reference<css::task::XJobExecutor> const& object)
|
||||
: Thread("jobexecutor")
|
||||
, object_(object)
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
void execute() override { object_->trigger(u"executor thread"_ustr); }
|
||||
|
||||
css::uno::Reference<css::task::XJobExecutor> object_;
|
||||
};
|
||||
|
||||
class Test : public cppu::WeakImplHelper<org::libreoffice::embindtest::XTest>
|
||||
{
|
||||
sal_Bool SAL_CALL getBoolean() override { return true; }
|
||||
|
@ -861,10 +876,19 @@ class Test : public cppu::WeakImplHelper<org::libreoffice::embindtest::XTest>
|
|||
}
|
||||
}
|
||||
|
||||
void SAL_CALL
|
||||
passJobExecutor(css::uno::Reference<css::task::XJobExecutor> const& object) override
|
||||
void SAL_CALL passJobExecutor(css::uno::Reference<css::task::XJobExecutor> const& object,
|
||||
sal_Bool newThread) override
|
||||
{
|
||||
object->trigger(u"executor"_ustr);
|
||||
if (newThread)
|
||||
{
|
||||
JobExecutorThread t(object);
|
||||
t.launch();
|
||||
t.join();
|
||||
}
|
||||
else
|
||||
{
|
||||
object->trigger(u"executor"_ustr);
|
||||
}
|
||||
}
|
||||
|
||||
void SAL_CALL passInterface(css::uno::Reference<css::uno::XInterface> const& object) override
|
||||
|
|
|
@ -878,7 +878,8 @@ Module.uno_init.then(function() {
|
|||
s.delete();
|
||||
}
|
||||
test.passJob(css.task.XJob.query(obj));
|
||||
test.passJobExecutor(css.task.XJobExecutor.query(obj));
|
||||
test.passJobExecutor(css.task.XJobExecutor.query(obj), false);
|
||||
//TODO: test.passJobExecutor(css.task.XJobExecutor.query(obj), true);
|
||||
test.passInterface(obj);
|
||||
css.task.XJobExecutor.query(obj).trigger('from JS');
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue