Ctrl-C 含有fast dds的进程不退出

代码这样写:

    if (participant_) {
      participant_->delete_contained_entities();
      eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->delete_participant(participant_);
    }

调用delete_contained_entities会出现shm watchdog线程没有退出

image

后面我挨个删除实体,并且反注册类型,最终没有再出现ctrl-c进程无法退出的问题。

代码这样的:

if (participant_) {

      // 删除sub相关的实体
      for (auto &[ignore, reader] : msg_sub_) {
        if (reader.valid) {
          // 先删除 datareader
          // reader.subscriber->delete_datareader(reader.reader);
          reader.subscriber->delete_contained_entities();
          // 再删除 listener
          delete reader.listener;
          // 最后是 subscriber
          participant_->delete_subscriber(reader.subscriber);
          reader.valid = false;
        }
      }

      // 删除pub相关的实体
      for (auto &[ignore, writer] : msg_pub_) {
        if (writer.valid) {
          // 先删除 datawriter
          // writer.publisher->delete_datawriter(writer.writer);
          writer.publisher->delete_contained_entities();
          // 再删除 listener
          delete writer.listener;
          // 最后是 publisher
          participant_->delete_publisher(writer.publisher);
          writer.valid = false;
        }
      }

      // 反注册 type
      for (auto &type_name : reg_type_names_) {
        participant_->unregister_type(type_name);
      }

      participant_->delete_contained_entities();
      eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->delete_participant(participant_);
    }

这个时候进程就能退出了。

有待进一步分析。