From a93384bda3ba6146e4e9972d8803b9a21f7aae6e Mon Sep 17 00:00:00 2001
From: Woo Xie <woo@fb.com>
Date: Mon, 29 Jun 2015 16:43:14 -0700
Subject: [PATCH] move the socket setting into setReadCB()

Summary: refactor D2201181

Reviewed By: @afrind

Differential Revision: D2202245
---
 folly/io/async/AsyncSSLSocket.cpp | 21 ++++++++++++++-------
 folly/io/async/AsyncSSLSocket.h   |  1 +
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/folly/io/async/AsyncSSLSocket.cpp b/folly/io/async/AsyncSSLSocket.cpp
index 4c9348a7..9c59cce7 100644
--- a/folly/io/async/AsyncSSLSocket.cpp
+++ b/folly/io/async/AsyncSSLSocket.cpp
@@ -1070,20 +1070,27 @@ AsyncSSLSocket::handleConnect() noexcept {
   AsyncSocket::handleInitialReadWrite();
 }
 
-void AsyncSSLSocket::prepareReadBuffer(void** buf, size_t* buflen) noexcept {
-  CHECK(readCallback_);
+void AsyncSSLSocket::setReadCB(ReadCallback *callback) {
 #ifdef SSL_MODE_MOVE_BUFFER_OWNERSHIP
   // turn on the buffer movable in openssl
   if (!isBufferMovable_ && readCallback_->isBufferMovable()) {
     SSL_set_mode(ssl_, SSL_get_mode(ssl_) | SSL_MODE_MOVE_BUFFER_OWNERSHIP);
-    *buf = nullptr;
-    *buflen = 0;
     isBufferMovable_ = true;
-    return;
   }
 #endif
-  // buf is necessary for SSLSocket without SSL_MODE_MOVE_BUFFER_OWNERSHIP
-  readCallback_->getReadBuffer(buf, buflen);
+
+  AsyncSocket::setReadCB(callback);
+}
+
+void AsyncSSLSocket::prepareReadBuffer(void** buf, size_t* buflen) noexcept {
+  CHECK(readCallback_);
+  if (isBufferMovable_) {
+    *buf = nullptr;
+    *buflen = 0;
+  } else {
+    // buf is necessary for SSLSocket without SSL_MODE_MOVE_BUFFER_OWNERSHIP
+    readCallback_->getReadBuffer(buf, buflen);
+  }
 }
 
 void
diff --git a/folly/io/async/AsyncSSLSocket.h b/folly/io/async/AsyncSSLSocket.h
index 85c3536e..2cae50a4 100644
--- a/folly/io/async/AsyncSSLSocket.h
+++ b/folly/io/async/AsyncSSLSocket.h
@@ -673,6 +673,7 @@ class AsyncSSLSocket : public virtual AsyncSocket {
 
   // Inherit event notification methods from AsyncSocket except
   // the following.
+  void setReadCB(ReadCallback* callback) override;
   void prepareReadBuffer(void** buf, size_t* buflen) noexcept override;
   void handleRead() noexcept override;
   void handleWrite() noexcept override;
-- 
2.34.1