ioprio.h raw

   1  // Copyright (c) 2016 Satoshi Nakamoto
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #ifndef LIMENKA_UTIL_IOPRIO_H
   6  #define LIMENKA_UTIL_IOPRIO_H
   7  
   8  #include <limenka-build-config.h> // IWYU pragma: keep
   9  
  10  #include <logging.h>
  11  
  12  #if HAVE_IOPRIO_SYSCALL || HAVE_IOPOLICY
  13  int ioprio_get();
  14  int ioprio_set(int ioprio);
  15  int ioprio_set_idle();
  16  
  17  class ioprio_idler {
  18  private:
  19      int orig;
  20  
  21  public:
  22      ioprio_idler(const bool lowprio) {
  23          if (!lowprio) {
  24              orig = -1;
  25              return;
  26          }
  27  
  28          orig = ioprio_get();
  29          if (orig == -1) {
  30              return;
  31          }
  32          if (ioprio_set_idle() == -1) {
  33              orig = -1;
  34          }
  35      }
  36  
  37      ~ioprio_idler() {
  38          if (orig == -1) {
  39              return;
  40          }
  41          if (ioprio_set(orig) == -1) {
  42              LogPrintf("failed to restore ioprio\n");
  43          }
  44      }
  45  };
  46  #define IOPRIO_IDLER(lowprio)  ioprio_idler ioprio_idler_(lowprio)
  47  
  48  #else
  49  #define ioprio_get() ((void)-1)
  50  #define ioprio_set(ioprio) ((void)-1)
  51  #define ioprio_set_idle() ((void)-1)
  52  #define IOPRIO_IDLER(lowprio)  (void)lowprio;
  53  #endif
  54  
  55  #if HAVE_WINDOWS_IOPRIO
  56  bool ioprio_set_file_idle(FILE *);
  57  #else
  58  #define ioprio_set_file_idle(f)  ((void)false)
  59  #endif
  60  
  61  #endif // LIMENKA_UTIL_IOPRIO_H
  62