HEX
Server: Apache
System: Linux wp02.tdr-lab.com 3.10.0-1160.42.2.el7.x86_64 #1 SMP Tue Sep 7 14:49:57 UTC 2021 x86_64
User: kusanagi (1001)
PHP: 7.4.23
Disabled: NONE
Upload Files
File: //proc/self/root/usr/include/hphp/runtime/base/file-await.h
#ifndef incl_HPHP_FILE_AWAIT_H
#define incl_HPHP_FILE_AWAIT_H

#include "hphp/runtime/ext/extension.h"
#include "hphp/runtime/ext/asio/asio-external-thread-event.h"
#include "hphp/runtime/ext/asio/socket-event.h"

namespace HPHP {
/////////////////////////////////////////////////////////////////////////////

struct FileAwait;

struct FileTimeoutHandler : AsioTimeoutHandler {
 friend struct FileAwait;

  FileTimeoutHandler(AsioEventBase* base, FileAwait* fa):
    AsioTimeoutHandler(base), m_fileAwait(fa) {}

  void timeoutExpired() noexcept override;

 private:
  FileAwait* m_fileAwait;
};

struct FileEventHandler : AsioEventHandler {
 friend struct FileAwait;

  FileEventHandler(AsioEventBase* base, int fd, FileAwait* fa):
    AsioEventHandler(base, fd), m_fileAwait(fa) {}

  void handlerReady(uint16_t events) noexcept override;

 private:
  FileAwait* m_fileAwait;
};

struct FileAwait : AsioExternalThreadEvent {
  enum Status {
    ERROR = -1,
    TIMEOUT = 0,
    READY,
    CLOSED,
  };

  FileAwait(int fd, uint16_t events, double timeout);
  ~FileAwait();
  void unserialize(Cell& c) override;
  void setFinished(int64_t status);
 private:
  std::shared_ptr<FileEventHandler> m_file;
  std::shared_ptr<FileTimeoutHandler> m_timeout;
  int m_result{-1};
  bool m_finished{false};
};

/////////////////////////////////////////////////////////////////////////////
} // namespace HPHP
#endif // incl_HPHP_FILE_AWAIT_H