Annotation of embedaddon/ntp/ports/winnt/libntp/setpriority.c, revision 1.1
1.1 ! misho 1: #include <config.h>
! 2: #include <windows.h>
! 3: #include <stdio.h>
! 4: #include <sys/resource.h> /* our private version */
! 5: #include "ntp_machine.h"
! 6: #include "ntp_stdlib.h"
! 7: #include "ntp_syslog.h"
! 8: #include "ntp_debug.h"
! 9: #include "ntp_fp.h"
! 10: #include "ntp.h"
! 11: #include "clockstuff.h"
! 12:
! 13:
! 14: /*
! 15: * setpriority
! 16: *
! 17: * to reduce the #ifdef forest in the portable code,
! 18: * we emulate the BSD setpriority interface:
! 19: *
! 20: * if (-1 == setpriority(PRIO_PROCESS, 0, NTP_PRIO))
! 21: * msyslog(LOG_ERR, "setpriority() error: %m");
! 22: *
! 23: * However, since the Windows port of ntpd has always raised its
! 24: * priority (to realtime if allowed, or silently downgraded to
! 25: * high by the system if not) with or without -N. Changing that
! 26: * now would endanger users who upgrade the binary without adding
! 27: * -N to its invocation. Instsrv assumes ntpd.exe is installed
! 28: * with no command-line arguments.
! 29: *
! 30: * This routine is used by utilities as well as ntpd itself, so
! 31: * it checks if the priority is already high or realtime and
! 32: * logs no complaints in that case, to avoid duplicating. ntpd
! 33: * will have raised the priority to one of those in
! 34: * init_winnt_time, while the utilities will rely on this
! 35: * code.
! 36: *
! 37: */
! 38:
! 39: int setpriority(
! 40: int which,
! 41: int who,
! 42: int prio
! 43: )
! 44: {
! 45: BOOL success;
! 46: DWORD prio_class;
! 47:
! 48: if (PRIO_PROCESS != which || who || NTP_PRIO != prio) {
! 49: DPRINTF(1,("windows setpriority() clone needs work.\n"));
! 50: }
! 51:
! 52: prio_class = GetPriorityClass(GetCurrentProcess());
! 53:
! 54: if (HIGH_PRIORITY_CLASS == prio_class ||
! 55: REALTIME_PRIORITY_CLASS == prio_class)
! 56: return 0;
! 57:
! 58: success = SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
! 59:
! 60: if (!success) {
! 61: msyslog(LOG_ERR, "Unable to raise priority: %m");
! 62: errno = EPERM;
! 63: return -1;
! 64: }
! 65:
! 66: prio_class = GetPriorityClass(GetCurrentProcess());
! 67:
! 68: if (REALTIME_PRIORITY_CLASS == prio_class)
! 69: msyslog(LOG_INFO, "Raised to realtime priority class");
! 70: else if (HIGH_PRIORITY_CLASS == prio_class)
! 71: msyslog(LOG_ERR, "Raised to high priority class, realtime "
! 72: "requires Increase Scheduling Priority "
! 73: "privilege (enabled with secpol.msc).");
! 74: else
! 75: msyslog(LOG_ERR, "Unexpected process priority class %d",
! 76: prio_class);
! 77:
! 78: return 0;
! 79: }
! 80:
! 81: /*
! 82: * InitSockets -- once known as Win32InitSockets()
! 83: *
! 84: * This doesn't have much to do with setpriority but we
! 85: * want the routine in libntp and this is a convenient
! 86: * existing Windows-only libntp source file.
! 87: */
! 88: void
! 89: InitSockets(
! 90: void
! 91: )
! 92: {
! 93: WORD wVersionRequested;
! 94: WSADATA wsaData;
! 95: int err;
! 96:
! 97: /* Need Winsock 2.0 or better */
! 98: wVersionRequested = MAKEWORD(2, 0);
! 99:
! 100: err = WSAStartup(wVersionRequested, &wsaData);
! 101: if ( err != 0 ) {
! 102: fprintf(stderr, "No useable winsock.dll: %s\n", strerror(err));
! 103: SetLastError(err);
! 104: msyslog(LOG_ERR, "No usable winsock.dll: %m");
! 105: exit(1);
! 106: }
! 107: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>