diff --git a/ac/initialization.m4 b/ac/initialization.m4 index ba725d1bd..f7258f9a2 100644 --- a/ac/initialization.m4 +++ b/ac/initialization.m4 @@ -17,5 +17,5 @@ PKG_PROG_PKG_CONFIG dnl Check for headers AC_HEADER_STDC() -AC_CHECK_HEADERS([inttypes.h stdint.h sys/types.h]) -AC_CHECK_FUNCS(vsscanf,,) +AC_CHECK_HEADERS([inttypes.h stdint.h sys/types.h sys/syscall.h]) +AC_CHECK_FUNCS([vsscanf syscall],,) diff --git a/src/common/common.cpp b/src/common/common.cpp index b91b6d394..233e73b4f 100644 --- a/src/common/common.cpp +++ b/src/common/common.cpp @@ -17,6 +17,9 @@ #ifdef SYS_WINDOWS # include #endif +#if defined(HAVE_SYS_SYSCALL_H) +# include +#endif #include #include @@ -107,6 +110,14 @@ set_process_priority(int priority) { // 'warn if return value is ignored'. if (!nice(s_nice_levels[priority + 2])) { } + +# if defined(HAVE_SYSCALL) && defined(SYS_ioprio_set) + if (0 < s_nice_levels[priority + 2]) + syscall(SYS_ioprio_set, + 1, // IOPRIO_WHO_PROCESS + 0, // current process/thread + 3 << 13); // I/O class 'idle' +# endif #endif }