For compatibility with gcc-4.4, eliminate use of sleep_for and

std::atomic
pull/3570/head
Vijay Pai 10 years ago
parent e57abcfbdb
commit 8423203cbb
  1. 30
      test/cpp/end2end/streaming_throughput_test.cc

@ -31,9 +31,9 @@
* *
*/ */
#include <atomic>
#include <mutex> #include <mutex>
#include <thread> #include <thread>
#include <time.h>
#include <grpc++/channel.h> #include <grpc++/channel.h>
#include <grpc++/client_context.h> #include <grpc++/client_context.h>
@ -44,6 +44,7 @@
#include <grpc++/server_builder.h> #include <grpc++/server_builder.h>
#include <grpc++/server_context.h> #include <grpc++/server_context.h>
#include <grpc/grpc.h> #include <grpc/grpc.h>
#include <grpc/support/atm.h>
#include <grpc/support/thd.h> #include <grpc/support/thd.h>
#include <grpc/support/time.h> #include <grpc/support/time.h>
#include <gtest/gtest.h> #include <gtest/gtest.h>
@ -99,12 +100,17 @@ namespace testing {
class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service { class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
public: public:
static void BidiStream_Sender(ServerReaderWriter<EchoResponse, EchoRequest>* stream, std::atomic<bool>* should_exit) { static void BidiStream_Sender(ServerReaderWriter<EchoResponse, EchoRequest>* stream, gpr_atm* should_exit) {
EchoResponse response; EchoResponse response;
response.set_message(kLargeString); response.set_message(kLargeString);
while (!should_exit->load()) { while (gpr_atm_acq_load(should_exit) == static_cast<gpr_atm>(0)) {
// TODO(vpai): Decide if the below requires blocking annotation struct timespec tv = {0, 1000000}; // 1 ms
std::this_thread::sleep_for(std::chrono::milliseconds(1)); struct timespec rem;
// TODO (vpai): Mark this blocking
while (nanosleep(&tv, &rem) != 0) {
tv = rem;
};
stream->Write(response); stream->Write(response);
} }
} }
@ -114,14 +120,20 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
ServerReaderWriter<EchoResponse, EchoRequest>* stream) ServerReaderWriter<EchoResponse, EchoRequest>* stream)
GRPC_OVERRIDE { GRPC_OVERRIDE {
EchoRequest request; EchoRequest request;
std::atomic<bool> should_exit(false); gpr_atm should_exit;
gpr_atm_rel_store(&should_exit, static_cast<gpr_atm>(0));
std::thread sender(std::bind(&TestServiceImpl::BidiStream_Sender, stream, &should_exit)); std::thread sender(std::bind(&TestServiceImpl::BidiStream_Sender, stream, &should_exit));
while (stream->Read(&request)) { while (stream->Read(&request)) {
// TODO(vpai): Decide if the below requires blocking annotation struct timespec tv = {0, 3000000}; // 3 ms
std::this_thread::sleep_for(std::chrono::milliseconds(3)); struct timespec rem;
// TODO (vpai): Mark this blocking
while (nanosleep(&tv, &rem) != 0) {
tv = rem;
};
} }
should_exit.store(true); gpr_atm_rel_store(&should_exit, static_cast<gpr_atm>(1));
sender.join(); sender.join();
return Status::OK; return Status::OK;
} }

Loading…
Cancel
Save