diff options
author | Mauro Sardara <msardara@cisco.com> | 2019-01-19 01:29:33 +0100 |
---|---|---|
committer | Mauro Sardara <msardara@cisco.com> | 2019-01-21 12:03:48 +0100 |
commit | 9e5f41ed6ebe64a789916794626485460078c420 (patch) | |
tree | d2ac3090026ec8929558e88eca533f8787a6ff0b /libtransport/src/hicn/transport/core/memif_connector.cc | |
parent | d13d37534d9449dd54277af664310d5f957dc44a (diff) |
- Code style fix
- Improved vpp binary api interface
- Correction in object pool destructor
- Fix error in Memif Connector
Change-Id: Id1dd9219fc1ac0b3717ae019ebff17373bebc635
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'libtransport/src/hicn/transport/core/memif_connector.cc')
-rw-r--r--[-rwxr-xr-x] | libtransport/src/hicn/transport/core/memif_connector.cc | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/libtransport/src/hicn/transport/core/memif_connector.cc b/libtransport/src/hicn/transport/core/memif_connector.cc index 7a672314e..b3785e5c3 100755..100644 --- a/libtransport/src/hicn/transport/core/memif_connector.cc +++ b/libtransport/src/hicn/transport/core/memif_connector.cc @@ -46,6 +46,7 @@ MemifConnector::MemifConnector(PacketReceivedCallback &&receive_callback, is_reconnection_(false), data_available_(false), enable_burst_(false), + closed_(false), app_name_(app_name), receive_callback_(receive_callback), on_reconnect_callback_(on_reconnect_callback), @@ -342,11 +343,14 @@ int MemifConnector::onInterrupt(memif_conn_handle_t conn, void *private_ctx, goto error; } + std::size_t packet_length; for (int i = 0; i < rx; i++) { auto packet = connector->getPacket(); + packet_length = (c->rx_bufs + i)->len; std::memcpy(packet->writableData(), reinterpret_cast<const uint8_t *>((c->rx_bufs + i)->data), - (c->rx_bufs + i)->len); + packet_length); + packet->append(packet_length); if (!connector->input_buffer_.push(std::move(packet))) { TRANSPORT_LOGI("Error pushing packet. Ring buffer full."); @@ -394,20 +398,19 @@ error: return 0; } -// void MemifConnector::runEventsLoop() { -// io_service_.run(); -//} - void MemifConnector::close() { - event_reactor_.stop(); - io_service_.stop(); - - if (memif_worker_ && memif_worker_->joinable()) { - memif_worker_->join(); - TRANSPORT_LOGD("Memif worker joined"); - deleteMemif(); - } else { - TRANSPORT_LOGD("Memif worker not joined"); + if (!closed_) { + closed_ = true; + event_reactor_.stop(); + io_service_.stop(); + + if (memif_worker_ && memif_worker_->joinable()) { + memif_worker_->join(); + TRANSPORT_LOGD("Memif worker joined"); + deleteMemif(); + } else { + TRANSPORT_LOGD("Memif worker not joined"); + } } } |