allow AsyncSignalHandler to attach and detach from an EventBase
[folly.git] / folly / io / async / AsyncPipe.h
index 63e73acb4aace853ca5d6c18e3a4510543b0bc36..7a4ece3dc537c194c1eab98a65b52e42b05bc93c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,6 +37,11 @@ class AsyncPipeReader : public EventHandler,
   typedef std::unique_ptr<AsyncPipeReader,
                           folly::DelayedDestruction::Destructor> UniquePtr;
 
+  template <typename... Args>
+  static UniquePtr newReader(Args&&... args) {
+    return UniquePtr(new AsyncPipeReader(std::forward<Args>(args)...));
+  }
+
   AsyncPipeReader(folly::EventBase* eventBase, int pipeFd)
     : EventHandler(eventBase, pipeFd),
     fd_(pipeFd) {}
@@ -72,7 +77,7 @@ class AsyncPipeReader : public EventHandler,
   }
 
  private:
-  ~AsyncPipeReader();
+  ~AsyncPipeReader() override;
 
   void handlerReady(uint16_t events) noexcept override;
   void failRead(const AsyncSocketException& ex);
@@ -93,6 +98,11 @@ class AsyncPipeWriter : public EventHandler,
   typedef std::unique_ptr<AsyncPipeWriter,
                           folly::DelayedDestruction::Destructor> UniquePtr;
 
+  template <typename... Args>
+  static UniquePtr newWriter(Args&&... args) {
+    return UniquePtr(new AsyncPipeWriter(std::forward<Args>(args)...));
+  }
+
   AsyncPipeWriter(folly::EventBase* eventBase, int pipeFd)
     : EventHandler(eventBase, pipeFd),
     fd_(pipeFd) {}
@@ -137,12 +147,16 @@ class AsyncPipeWriter : public EventHandler,
   }
 
   // AsyncWriter methods
-  void write(folly::AsyncWriter::WriteCallback* callback, const void* buf,
-             size_t bytes, WriteFlags flags = WriteFlags::NONE) override {
+  void write(folly::AsyncWriter::WriteCallback* callback,
+             const void* buf,
+             size_t bytes,
+             WriteFlags flags = WriteFlags::NONE) override {
     writeChain(callback, IOBuf::wrapBuffer(buf, bytes), flags);
   }
-  void writev(folly::AsyncWriter::WriteCallback*, const iovec*,
-              size_t, WriteFlags = WriteFlags::NONE) override {
+  void writev(folly::AsyncWriter::WriteCallback*,
+              const iovec*,
+              size_t,
+              WriteFlags = WriteFlags::NONE) override {
     throw std::runtime_error("writev is not supported. Please use writeChain.");
   }
   void writeChain(folly::AsyncWriter::WriteCallback* callback,
@@ -159,7 +173,7 @@ class AsyncPipeWriter : public EventHandler,
   bool closeOnEmpty_{false};
   std::function<void(int)> closeCb_;
 
-  ~AsyncPipeWriter() {
+  ~AsyncPipeWriter() override {
     closeNow();
   }
 };