From 3499db227b1c0fffce3068fdda481036915c2429 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Fri, 29 May 2015 22:36:16 +0300 Subject: [PATCH] Stack-allocating the service response structure --- libuavcan/include/uavcan/node/service_server.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libuavcan/include/uavcan/node/service_server.hpp b/libuavcan/include/uavcan/node/service_server.hpp index d7181fd0d0..17076b4c5a 100644 --- a/libuavcan/include/uavcan/node/service_server.hpp +++ b/libuavcan/include/uavcan/node/service_server.hpp @@ -120,26 +120,26 @@ private: PublisherType publisher_; Callback callback_; uint32_t response_failure_count_; - ServiceResponseDataStructure response_; virtual void handleReceivedDataStruct(ReceivedDataStructure& request) { UAVCAN_ASSERT(request.getTransferType() == TransferTypeServiceRequest); + + ServiceResponseDataStructure response; + if (try_implicit_cast(callback_, true)) { - // The application needs newly initialized structure - response_ = ServiceResponseDataStructure(); - UAVCAN_ASSERT(response_.isResponseEnabled()); // Enabled by default - callback_(request, response_); + UAVCAN_ASSERT(response.isResponseEnabled()); // Enabled by default + callback_(request, response); } else { handleFatalError("Srv serv clbk"); } - if (response_.isResponseEnabled()) + if (response.isResponseEnabled()) { - const int res = publisher_.publish(response_, TransferTypeServiceResponse, request.getSrcNodeID(), + const int res = publisher_.publish(response, TransferTypeServiceResponse, request.getSrcNodeID(), request.getTransferID()); if (res < 0) {