예제 #1
0
 void resetExternal() {
     if (writer!=NULL) {
         writer->onCompletion();
         writer = NULL;
     }
     external = NULL;
 }
예제 #2
0
 void resetExternal()
 {
     if (writer!=nullptr) {
         writer->onCompletion();
         writer = nullptr;
     }
     external = nullptr;
 }
예제 #3
0
 bool release() {
     stateSema.wait();
     PortWriter *cback = callback;
     current = YARP_NULLPTR;
     callback = YARP_NULLPTR;
     stateSema.post();
     if (cback!=YARP_NULLPTR) {
         stateSema.wait();
         outCt++;
         stateSema.post();
         cback->onCompletion();
     }
     return cback!=YARP_NULLPTR;
 }
예제 #4
0
/**
 * write something to the port
 */
bool Port::write(PortWriter& writer, PortReader& reader,
                 PortWriter *callback) const {
    PortCoreAdapter& core = HELPER(implementation);
    if (core.isInterrupted()) return false;
    bool result = false;
    result = core.send(writer,&reader,callback);
    if (!result) {
        //YARP_DEBUG(Logger::get(), e.toString() + " <<<< Port::write saw this");
        if (callback!=NULL) {
            callback->onCompletion();
        } else {
            writer.onCompletion();
        }
        // leave result false
    }
    return result;
}
예제 #5
0
파일: Port.cpp 프로젝트: robotology/yarp
bool Port::write(const PortWriter& writer, const PortWriter *callback) const
{
    PortCoreAdapter& core = IMPL();
    if (core.isInterrupted()) return false;
    core.alertOnWrite();
    bool result = false;
    //WritableAdapter adapter(writer);
    result = core.send(writer, nullptr, callback);
    //writer.onCompletion();
    if (!result) {
        //YARP_DEBUG(Logger::get(), e.toString() + " <<<< Port::write saw this");
        if (callback!=nullptr) {
            callback->onCompletion();
        } else {
            writer.onCompletion();
        }
        // leave result false
    }
    return result;
}