diff --git a/src_main/core/piobject.cpp b/src_main/core/piobject.cpp index 45f386b5..1f1451d0 100755 --- a/src_main/core/piobject.cpp +++ b/src_main/core/piobject.cpp @@ -360,9 +360,13 @@ void PIObject::piDisconnect(PIObject * src) { PIMutexLocker _ml(src->mutex_connect); PIVector cv = src->connectors.toVector(); piForeach (PIObject * o, cv) { - if (o == src) continue; + //piCout << "disconnect"<< src->className()<< o->className(); + if (!o || (o == src)) continue; + if (!o->isPIObject()) continue; #ifndef ANDROID +# ifndef MAC_OS PIMutexLocker _mld(o->mutex_connect, src != o); +# endif #endif PIVector<__Connection> & oc(o->connections); for (int i = 0; i < oc.size_s(); ++i) { @@ -373,8 +377,10 @@ void PIObject::piDisconnect(PIObject * src) { } } } - piForeachC (PIObject::__Connection & c, src->connections) + piForeachC (PIObject::__Connection & c, src->connections) { + if (!c.dest_o->isPIObject()) continue; c.dest_o->connectors.remove(src); + } src->connections.clear(); }