Repository: thrift Updated Branches: refs/heads/master 3590f1e7c -> e1832c354
THRIFT-3622: remove auto_ptr use in the codebase because it is deprecated Client: C++ This closes #1183 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/e1832c35 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/e1832c35 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/e1832c35 Branch: refs/heads/master Commit: e1832c354391deb0e0ce94a62ff32e8ce1c83fd3 Parents: 3590f1e Author: James E. King, III <jk...@apache.org> Authored: Fri Feb 10 13:03:10 2017 -0500 Committer: James E. King, III <jk...@apache.org> Committed: Fri Feb 10 13:03:10 2017 -0500 ---------------------------------------------------------------------- lib/cpp/src/thrift/async/TEvhttpServer.cpp | 4 +-- .../thrift/concurrency/BoostThreadFactory.cpp | 8 +++--- lib/cpp/src/thrift/transport/TFileTransport.cpp | 27 +++++++++++++++++--- lib/cpp/test/DebugProtoTest.cpp | 7 ++--- lib/cpp/test/JSONProtoTest.cpp | 7 ++--- 5 files changed, 38 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/e1832c35/lib/cpp/src/thrift/async/TEvhttpServer.cpp ---------------------------------------------------------------------- diff --git a/lib/cpp/src/thrift/async/TEvhttpServer.cpp b/lib/cpp/src/thrift/async/TEvhttpServer.cpp index 57d0d61..4fa41f8 100644 --- a/lib/cpp/src/thrift/async/TEvhttpServer.cpp +++ b/lib/cpp/src/thrift/async/TEvhttpServer.cpp @@ -20,10 +20,10 @@ #include <thrift/async/TEvhttpServer.h> #include <thrift/async/TAsyncBufferProcessor.h> #include <thrift/transport/TBufferTransports.h> +#include <boost/scoped_ptr.hpp> #include <evhttp.h> #include <event2/buffer.h> #include <event2/buffer_compat.h> - #include <iostream> #ifndef HTTP_INTERNAL // libevent < 2 @@ -118,7 +118,7 @@ void TEvhttpServer::process(struct evhttp_request* req) { void TEvhttpServer::complete(RequestContext* ctx, bool success) { (void)success; - std::auto_ptr<RequestContext> ptr(ctx); + boost::scoped_ptr<RequestContext> ptr(ctx); int code = success ? 200 : 400; const char* reason = success ? "OK" : "Bad Request"; http://git-wip-us.apache.org/repos/asf/thrift/blob/e1832c35/lib/cpp/src/thrift/concurrency/BoostThreadFactory.cpp ---------------------------------------------------------------------- diff --git a/lib/cpp/src/thrift/concurrency/BoostThreadFactory.cpp b/lib/cpp/src/thrift/concurrency/BoostThreadFactory.cpp index a72d38b..6adcb68 100644 --- a/lib/cpp/src/thrift/concurrency/BoostThreadFactory.cpp +++ b/lib/cpp/src/thrift/concurrency/BoostThreadFactory.cpp @@ -26,8 +26,9 @@ #include <cassert> -#include <boost/weak_ptr.hpp> +#include <boost/scoped_ptr.hpp> #include <boost/thread.hpp> +#include <boost/weak_ptr.hpp> namespace apache { namespace thrift { @@ -48,7 +49,7 @@ public: static void* threadMain(void* arg); private: - std::auto_ptr<boost::thread> thread_; + boost::scoped_ptr<boost::thread> thread_; STATE state_; weak_ptr<BoostThread> self_; bool detached_; @@ -80,8 +81,7 @@ public: state_ = starting; - thread_ - = std::auto_ptr<boost::thread>(new boost::thread(boost::bind(threadMain, (void*)selfRef))); + thread_.reset(new boost::thread(boost::bind(threadMain, (void*)selfRef))); if (detached_) thread_->detach(); http://git-wip-us.apache.org/repos/asf/thrift/blob/e1832c35/lib/cpp/src/thrift/transport/TFileTransport.cpp ---------------------------------------------------------------------- diff --git a/lib/cpp/src/thrift/transport/TFileTransport.cpp b/lib/cpp/src/thrift/transport/TFileTransport.cpp index 85e88b9..e49f81c 100644 --- a/lib/cpp/src/thrift/transport/TFileTransport.cpp +++ b/lib/cpp/src/thrift/transport/TFileTransport.cpp @@ -24,6 +24,16 @@ #include <thrift/transport/PlatformSocket.h> #include <thrift/concurrency/FunctionRunner.h> +#include <boost/scoped_ptr.hpp> +#include <boost/version.hpp> +#if (BOOST_VERSION >= 105700) +#include <boost/move/unique_ptr.hpp> +using boost::movelib::unique_ptr; +#else +#include <boost/interprocess/smart_ptr/unique_ptr.hpp> +using boost::interprocess::unique_ptr; +#endif + #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #else @@ -52,9 +62,12 @@ namespace apache { namespace thrift { namespace transport { -using boost::scoped_ptr; using boost::shared_ptr; -using namespace std; +using std::cerr; +using std::cout; +using std::endl; +using std::min; +using std::string; using namespace apache::thrift::protocol; using namespace apache::thrift::concurrency; @@ -192,6 +205,14 @@ void TFileTransport::write(const uint8_t* buf, uint32_t len) { enqueueEvent(buf, len); } +// this is needed until boost 1.57 as the older unique_ptr implementation +// has no default deleter in interprocess +template <class _T> +struct uniqueDeleter +{ + void operator()(_T *ptr) const { delete ptr; } +}; + void TFileTransport::enqueueEvent(const uint8_t* buf, uint32_t eventLen) { // can't enqueue more events if file is going to close if (closing_) { @@ -209,7 +230,7 @@ void TFileTransport::enqueueEvent(const uint8_t* buf, uint32_t eventLen) { return; } - std::auto_ptr<eventInfo> toEnqueue(new eventInfo()); + unique_ptr<eventInfo, uniqueDeleter<eventInfo> > toEnqueue(new eventInfo()); toEnqueue->eventBuff_ = new uint8_t[(sizeof(uint8_t) * eventLen) + 4]; // first 4 bytes is the event length http://git-wip-us.apache.org/repos/asf/thrift/blob/e1832c35/lib/cpp/test/DebugProtoTest.cpp ---------------------------------------------------------------------- diff --git a/lib/cpp/test/DebugProtoTest.cpp b/lib/cpp/test/DebugProtoTest.cpp index 607744b..c070af2 100644 --- a/lib/cpp/test/DebugProtoTest.cpp +++ b/lib/cpp/test/DebugProtoTest.cpp @@ -21,13 +21,14 @@ #include <cmath> #include "gen-cpp/DebugProtoTest_types.h" #include <thrift/protocol/TDebugProtocol.h> +#include <boost/scoped_ptr.hpp> #define BOOST_TEST_MODULE DebugProtoTest #include <boost/test/unit_test.hpp> using namespace thrift::test::debug; -static std::auto_ptr<OneOfEach> ooe; +static boost::scoped_ptr<OneOfEach> ooe; void testCaseSetup_1() { ooe.reset(new OneOfEach); @@ -80,7 +81,7 @@ BOOST_AUTO_TEST_CASE(test_debug_proto_1) { "Expected:\n" << expected_result << "\nGotten:\n" << result); } -static std::auto_ptr<Nesting> n; +static boost::scoped_ptr<Nesting> n; void testCaseSetup_2() { testCaseSetup_1(); @@ -148,7 +149,7 @@ BOOST_AUTO_TEST_CASE(test_debug_proto_2) { "Expected:\n" << expected_result << "\nGotten:\n" << result); } -static std::auto_ptr<HolyMoley> hm; +static boost::scoped_ptr<HolyMoley> hm; void testCaseSetup_3() { testCaseSetup_2(); http://git-wip-us.apache.org/repos/asf/thrift/blob/e1832c35/lib/cpp/test/JSONProtoTest.cpp ---------------------------------------------------------------------- diff --git a/lib/cpp/test/JSONProtoTest.cpp b/lib/cpp/test/JSONProtoTest.cpp index 2da3044..2ac7adc 100644 --- a/lib/cpp/test/JSONProtoTest.cpp +++ b/lib/cpp/test/JSONProtoTest.cpp @@ -23,6 +23,7 @@ #include <sstream> #include <thrift/transport/TBufferTransports.h> #include <thrift/protocol/TJSONProtocol.h> +#include <boost/scoped_ptr.hpp> #include "gen-cpp/DebugProtoTest_types.h" #define BOOST_TEST_MODULE JSONProtoTest @@ -32,7 +33,7 @@ using namespace thrift::test::debug; using apache::thrift::transport::TMemoryBuffer; using apache::thrift::protocol::TJSONProtocol; -static std::auto_ptr<OneOfEach> ooe; +static boost::scoped_ptr<OneOfEach> ooe; void testCaseSetup_1() { ooe.reset(new OneOfEach); @@ -65,7 +66,7 @@ BOOST_AUTO_TEST_CASE(test_json_proto_1) { "Expected:\n" << expected_result << "\nGotten:\n" << result); } -static std::auto_ptr<Nesting> n; +static boost::scoped_ptr<Nesting> n; void testCaseSetup_2() { testCaseSetup_1(); @@ -105,7 +106,7 @@ BOOST_AUTO_TEST_CASE(test_json_proto_2) { "Expected:\n" << expected_result << "\nGotten:\n" << result); } -static std::auto_ptr<HolyMoley> hm; +static boost::scoped_ptr<HolyMoley> hm; void testCaseSetup_3() { testCaseSetup_2();