History

Further work on V8

ksuprynowicz committed 3 years ago

Commit acbec551 parent b786ffc2 files · +10 −1Browse files

Showing the changes to libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp (1 of 2 files). Show all

Unified · Split

libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp+7−1
@@ -1087,6 +1087,8 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu · 1086 unmodified lines
10871087 connections = _connections;
10881088 });*/
10891089
1090+ // V8TODO: this may cause deadlocks on connect/disconnect, so the connect/disconnect procedure needs to be reworked.
1091+ // It should probably add events to a separate list that would be processed before and after all the events for the signal.
10901092 withReadLock([&]{
10911093 //for (ConnectionList::iterator iter = connections.begin(); iter != connections.end(); ++iter) {
10921094 for (ConnectionList::iterator iter = _connections.begin(); iter != _connections.end(); ++iter) {
@@ -1099,7 +1101,11 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu · 6 unmodified lines
10991101
11001102 Q_ASSERT(!conn.callback.get().IsEmpty());
11011103 Q_ASSERT(!conn.callback.get()->IsUndefined());
1102− Q_ASSERT(!conn.callback.get()->IsNull());
1104+ if(conn.callback.get()->IsNull()) {
1105+ qDebug() << "ScriptSignalV8Proxy::qt_metacall: Connection callback is Null";
1106+ _engine->popContext();
1107+ continue;
1108+ }
11031109 if (!conn.callback.get()->IsFunction()) {
11041110 auto stringV8 = conn.callback.get()->ToDetailString(functionContext).ToLocalChecked();
11051111 QString error = *v8::String::Utf8Value(_engine->getIsolate(), stringV8);