X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FConnectors.cc;h=22f39296691b132ecee76ebb2d22272eec171450;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=ab1a03825c57cbc4015ee0b97464bf44fefd0f1d;hpb=28e21cc5680c097e7daed8c412ee32cf26a75a60;p=senf.git diff --git a/PPI/Connectors.cc b/PPI/Connectors.cc index ab1a038..22f3929 100644 --- a/PPI/Connectors.cc +++ b/PPI/Connectors.cc @@ -40,7 +40,14 @@ prefix_ void senf::ppi::connector::Connector::connect(Connector & target) { - SENF_ASSERT( module_ && ! peer_ && target.module_ && ! target.peer_ ); + // The connector is not registered -> route() or noroute() statement missing + SENF_ASSERT( module_ ); + // The connector is already connected + SENF_ASSERT( ! peer_ ); + // The target connector is not registered -> route() or noroute() statement missing + SENF_ASSERT( target.module_ ); + // The target connector is already connected + SENF_ASSERT( ! target.peer_ ); if (! (packetTypeID() == typeid(void) || target.packetTypeID() == typeid(void) || packetTypeID() == target.packetTypeID()) ) @@ -53,8 +60,24 @@ prefix_ void senf::ppi::connector::Connector::connect(Connector & target) peer_ = & target; target.peer_ = this; - if (ModuleManager::instance().running()) - v_init(); + if (! initializationScheduled()) + enqueueInitializable(); + if (! peer().initializationScheduled()) + peer().enqueueInitializable(); +} + +prefix_ void senf::ppi::connector::Connector::disconnect() +{ + // Cannot disconnected a non-connected connector + SENF_ASSERT( peer_ ); + Connector & peer (*peer_); + peer_ = 0; + peer.peer_ = 0; + + if (! initializationScheduled()) + enqueueInitializable(); + if (! peer.initializationScheduled()) + peer.enqueueInitializable(); } prefix_ std::type_info const & senf::ppi::connector::Connector::packetTypeID()