/* * Copyright (C) 1996-2017 The Squid Software Foundation and contributors * * Squid software is distributed under GPLv2+ license and includes * contributions from numerous individuals and organizations. * Please see the COPYING and CONTRIBUTORS files for details. */ /* DEBUG: section 79 Disk IO Routines */ #ifndef SQUID_DISKTHREADSDISKFILE_H #define SQUID_DISKTHREADSDISKFILE_H #include "cbdata.h" #include "DiskIO/DiskFile.h" #include "DiskThreads.h" class DiskThreadsDiskFile : public DiskFile { public: DiskThreadsDiskFile(char const *path, DiskThreadsIOStrategy *); ~DiskThreadsDiskFile(); virtual void open(int flags, mode_t mode, RefCount callback); virtual void create(int flags, mode_t mode, RefCount callback); virtual void read(ReadRequest *); virtual void write(WriteRequest *); virtual void close(); virtual bool error() const; virtual int getFD() const { return fd;} virtual bool canRead() const; virtual bool canWrite() const; virtual bool ioInProgress() const; private: #if ASYNC_READ static AIOCB ReadDone; #else static DRCB ReadDone; #endif #if ASYNC_WRITE static AIOCB WriteDone; #else static DWCB WriteDone; #endif int fd; bool errorOccured; char const *path_; DiskThreadsIOStrategy *IO; size_t inProgressIOs; static AIOCB OpenDone; void openDone(int fd, const char *buf, int aio_return, int aio_errno); RefCount ioRequestor; void doClose(); void readDone(int fd, const char *buf, int len, int errflag, RefCount request); void writeDone(int fd, int errflag, size_t len, RefCount request); CBDATA_CLASS2(DiskThreadsDiskFile); }; #include "DiskIO/ReadRequest.h" template class IoResult { public: IoResult(RefCount aFile, RefCount aRequest) : file(aFile), request(aRequest) {} RefCount file; RefCount request; private: CBDATA_CLASS2(IoResult); }; template IoResult IOResult(RefCount aRequest, RefCount aFile) { return IoResult(aFile, aRequest);} #endif /* SQUID_DISKTHREADSDISKFILE_H */