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