@@ -400,6 +400,10 @@ class QScriptConnection : public QObject
400
400
bool connect (v8::Handle<v8::Object> receiver, v8::Handle<v8::Object> callback, Qt::ConnectionType type);
401
401
bool disconnect ();
402
402
403
+ QScriptEnginePrivate *engine () const
404
+ {
405
+ return m_signal->engine ;
406
+ }
403
407
v8::Handle<v8::Object> callback () const
404
408
{ return m_callback; }
405
409
@@ -415,7 +419,17 @@ class QScriptConnection : public QObject
415
419
416
420
// Slot.
417
421
void onSignal (void **);
418
- void deleteNow () { delete this ; }
422
+ void deleteNow ()
423
+ {
424
+ // This will be called if underlaying qobject instance is destroyed so there is no guarantee
425
+ // that an isolate was setup correctly (delete can be called outside of public QtScript API).
426
+ QScriptEnginePrivate *engine = this ->engine ();
427
+ QScriptIsolate api (engine, QScriptIsolate::NotNullEngine);
428
+ Q_ASSERT_X (engine == QScriptQObjectData::get (m_signal->object ())->engine (),
429
+ Q_FUNC_INFO,
430
+ " Mismatch of QScriptEngines detected" );
431
+ delete this ;
432
+ }
419
433
420
434
private:
421
435
QScriptSignalData *m_signal;
@@ -548,6 +562,8 @@ v8::Handle<v8::Value> QScriptGenericMetaMethodData<T, functionTemplate>::call()
548
562
QScriptConnection::QScriptConnection (QScriptSignalData *signal)
549
563
: m_signal(signal)
550
564
{
565
+ Q_ASSERT (m_signal);
566
+ Q_ASSERT (m_signal->engine );
551
567
}
552
568
553
569
QScriptConnection::~QScriptConnection ()
@@ -611,8 +627,11 @@ void QScriptConnection::onSignal(void **argv)
611
627
{
612
628
Q_ASSERT (!m_callback.IsEmpty ());
613
629
614
- QScriptEnginePrivate *engine = QScriptQObjectData::get (m_signal->object ())->engine ();
615
- QScriptIsolate api (engine);
630
+ QScriptEnginePrivate *engine = this ->engine ();
631
+ QScriptIsolate api (engine, QScriptIsolate::NotNullEngine);
632
+ Q_ASSERT_X (engine == QScriptQObjectData::get (m_signal->object ())->engine (),
633
+ Q_FUNC_INFO,
634
+ " Mismatch of QScriptEngines detected" );
616
635
v8::HandleScope handleScope;
617
636
618
637
const QMetaObject *meta = sender ()->metaObject ();
0 commit comments