diff --git a/lib/cpp/src/async/TAsyncChannel.cpp b/lib/cpp/src/async/TAsyncChannel.cpp
index 2bf02fe..9397017 100644
--- a/lib/cpp/src/async/TAsyncChannel.cpp
+++ b/lib/cpp/src/async/TAsyncChannel.cpp
@@ -22,13 +22,13 @@
 
 namespace apache { namespace thrift { namespace async {
 
-bool TAsyncChannel::sendAndRecvMessage(const VoidCallback& cob,
+void TAsyncChannel::sendAndRecvMessage(const VoidCallback& cob,
                                        TMemoryBuffer* sendBuf,
                                        TMemoryBuffer* recvBuf) {
   std::tr1::function<void()> send_done =
     std::tr1::bind(&TAsyncChannel::recvMessage, this, cob, recvBuf);
 
-  return sendMessage(send_done, sendBuf);
+  sendMessage(send_done, sendBuf);
 }
 
 }}}  // apache::thrift::async
diff --git a/lib/cpp/src/async/TAsyncChannel.h b/lib/cpp/src/async/TAsyncChannel.h
index 72aa4e0..1f49273 100644
--- a/lib/cpp/src/async/TAsyncChannel.h
+++ b/lib/cpp/src/async/TAsyncChannel.h
@@ -46,21 +46,21 @@
    *
    * @return  true iff the cob has been or will be called, else false
    */
-  virtual bool sendMessage(const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message) = 0;
+  virtual void sendMessage(const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message) = 0;
 
   /**
    * Receive a message from the channel.
    *
    * @return  true iff the cob has been or will be called, else false
    */
-  virtual bool recvMessage(const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message) = 0;
+  virtual void recvMessage(const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message) = 0;
 
   /**
    * Send a message over the channel and receive a response.
    *
    * @return  true iff the cob has been or will be called, else false
    */
-  virtual bool sendAndRecvMessage(const VoidCallback& cob,
+  virtual void sendAndRecvMessage(const VoidCallback& cob,
                                   apache::thrift::transport::TMemoryBuffer* sendBuf,
                                   apache::thrift::transport::TMemoryBuffer* recvBuf);
 };
diff --git a/lib/cpp/src/async/TEvhttpClientChannel.cpp b/lib/cpp/src/async/TEvhttpClientChannel.cpp
index b5265ce..e5fc1b0 100755
--- a/lib/cpp/src/async/TEvhttpClientChannel.cpp
+++ b/lib/cpp/src/async/TEvhttpClientChannel.cpp
@@ -50,7 +50,7 @@
 }
 
 
-bool TEvhttpClientChannel::sendAndRecvMessage(
+void TEvhttpClientChannel::sendAndRecvMessage(
     const VoidCallback& cob,
     apache::thrift::transport::TMemoryBuffer* sendBuf,
     apache::thrift::transport::TMemoryBuffer* recvBuf) {
@@ -86,12 +86,10 @@
   if (rv != 0) {
     abort(); // XXX
   }
-
-  return true;
 }
 
 
-bool TEvhttpClientChannel::sendMessage(
+void TEvhttpClientChannel::sendMessage(
     const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message) {
   (void) cob;
   (void) message;
@@ -99,7 +97,7 @@
 }
 
 
-bool TEvhttpClientChannel::recvMessage(
+void TEvhttpClientChannel::recvMessage(
     const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message) {
   (void) cob;
   (void) message;
@@ -109,14 +107,17 @@
 
 void TEvhttpClientChannel::finish(struct evhttp_request* req) {
   if (req == NULL) {
-    return cob_();
+    cob_();
+	return;
   } else if (req->response_code != 200) {
-    return cob_();
+    cob_();
+	return;
   }
   recvBuf_->resetBuffer(
       EVBUFFER_DATA(req->input_buffer),
       EVBUFFER_LENGTH(req->input_buffer));
-  return cob_();
+  cob_();
+  return;
 }
 
 
diff --git a/lib/cpp/src/async/TEvhttpClientChannel.h b/lib/cpp/src/async/TEvhttpClientChannel.h
index d2bc4b3..d497edb 100644
--- a/lib/cpp/src/async/TEvhttpClientChannel.h
+++ b/lib/cpp/src/async/TEvhttpClientChannel.h
@@ -46,12 +46,12 @@
       struct event_base* eb);
   ~TEvhttpClientChannel();
 
-  virtual bool sendAndRecvMessage(const VoidCallback& cob,
+  virtual void sendAndRecvMessage(const VoidCallback& cob,
                                   apache::thrift::transport::TMemoryBuffer* sendBuf,
                                   apache::thrift::transport::TMemoryBuffer* recvBuf);
 
-  virtual bool sendMessage(const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message);
-  virtual bool recvMessage(const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message);
+  virtual void sendMessage(const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message);
+  virtual void recvMessage(const VoidCallback& cob, apache::thrift::transport::TMemoryBuffer* message);
 
   void finish(struct evhttp_request* req);
 
