From 4aa4a1e8a5169e4aebc927d7dee8d5f510366c6a Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Wed, 19 Jul 2017 12:32:19 +0300 Subject: [PATCH] [partners_api] taxi engine crash fix --- partners_api/partners_api_tests/uber_tests.cpp | 14 ++++++++++---- partners_api/uber_api.cpp | 4 ++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/partners_api/partners_api_tests/uber_tests.cpp b/partners_api/partners_api_tests/uber_tests.cpp index f30c621ccf..642dd20e50 100644 --- a/partners_api/partners_api_tests/uber_tests.cpp +++ b/partners_api/partners_api_tests/uber_tests.cpp @@ -172,10 +172,12 @@ UNIT_TEST(Uber_GetAvailableProducts) ms::LatLon const to(55.758213, 37.616093); std::vector resultProducts; + std::atomic counter(0); api.GetAvailableProducts(from, to, - [&resultProducts](std::vector const & products) { + [&resultProducts, &counter](std::vector const & products) { resultProducts = products; + ++counter; GetPlatform().RunOnGuiThread([] { testing::StopEventLoop(); }); }, [](taxi::ErrorCode const code) { @@ -186,7 +188,9 @@ UNIT_TEST(Uber_GetAvailableProducts) testing::RunEventLoop(); TEST(!resultProducts.empty(), ()); + TEST_EQUAL(counter, 1, ()); + counter = 0; taxi::ErrorCode errorCode = taxi::ErrorCode::RemoteError; ms::LatLon const farPos(56.838197, 35.908507); api.GetAvailableProducts(from, farPos, @@ -194,14 +198,16 @@ UNIT_TEST(Uber_GetAvailableProducts) TEST(false, ()); GetPlatform().RunOnGuiThread([] { testing::StopEventLoop(); }); }, - [&errorCode](taxi::ErrorCode const code) { + [&errorCode, &counter](taxi::ErrorCode const code) { errorCode = code; + ++counter; GetPlatform().RunOnGuiThread([=] { testing::StopEventLoop(); }); }); - TEST_EQUAL(errorCode, taxi::ErrorCode::NoProducts, ()); - testing::RunEventLoop(); + + TEST_EQUAL(errorCode, taxi::ErrorCode::NoProducts, ()); + TEST_EQUAL(counter, 1, ()); } UNIT_TEST(Uber_GetRideRequestLinks) diff --git a/partners_api/uber_api.cpp b/partners_api/uber_api.cpp index 98a3ae92dd..4896ed3acd 100644 --- a/partners_api/uber_api.cpp +++ b/partners_api/uber_api.cpp @@ -218,6 +218,10 @@ void ProductMaker::MakeProducts(uint64_t const requestId, ProductsCallback const if (m_error) error = my::make_unique(*m_error); + + // Reset m_times and m_prices because we need to call callback only once. + m_times.reset(); + m_prices.reset(); } if (error)