annotate win32.py @ 123:90c002c960cb

Fixed CPU time display on UNIX Previously, the total CPU time spent by the testee on all test cases up to and including the current one was displayed.
author Oleg Oshmyan <chortos@inbox.lv>
date Sun, 24 Apr 2011 19:28:40 +0100
parents d6fd880207cb
children 10aa5a0e46bd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
1 # Copyright (c) 2010-2011 Chortos-2 <chortos@inbox.lv>
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
2
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
3 from __future__ import division, with_statement
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
4
91
c62c9bfd614a Removed import_error
Oleg Oshmyan <chortos@inbox.lv>
parents: 85
diff changeset
5 from compat import *
c62c9bfd614a Removed import_error
Oleg Oshmyan <chortos@inbox.lv>
parents: 85
diff changeset
6 import testcases # mutual import
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
7
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
8 from ctypes import *
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
9 from ctypes.wintypes import *
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
10 from msvcrt import getch as pause
95
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
11 import os, subprocess, sys
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
12
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
13 try:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
14 from _winreg import *
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
15 except ImportError:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
16 from winreg import *
85
741ae3391b61 Moved clock/time detection into platform-specific modules and testcases
Oleg Oshmyan <chortos@inbox.lv>
parents: 82
diff changeset
17
741ae3391b61 Moved clock/time detection into platform-specific modules and testcases
Oleg Oshmyan <chortos@inbox.lv>
parents: 82
diff changeset
18 try:
741ae3391b61 Moved clock/time detection into platform-specific modules and testcases
Oleg Oshmyan <chortos@inbox.lv>
parents: 82
diff changeset
19 from testcases import clock
741ae3391b61 Moved clock/time detection into platform-specific modules and testcases
Oleg Oshmyan <chortos@inbox.lv>
parents: 82
diff changeset
20 except ImportError:
741ae3391b61 Moved clock/time detection into platform-specific modules and testcases
Oleg Oshmyan <chortos@inbox.lv>
parents: 82
diff changeset
21 from time import clock
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
22
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
23 # Defaults that may be overwritten by values from _subprocess
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
24 INFINITE = -1
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
25 STD_INPUT_HANDLE = -10
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
26 WAIT_OBJECT_0 = 0
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
27
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
28 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
29 from _subprocess import *
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
30 except ImportError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
31 pass
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
32
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
33 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
34 from numbers import Integral
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
35 except ImportError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
36 Integral = int, long
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
37
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
38 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
39 from collections import namedtuple
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
40 except ImportError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
41 from operator import itemgetter
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
42 class ProcessTimes(tuple):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
43 __slots__ = ()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
44 __new__ = lambda cls, kernel, user: tuple.__new__(cls, (kernel, user))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
45 __getnewargs__ = lambda self: tuple(self)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
46 kernel, user = (property(itemgetter(i)) for i in (0, 1))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
47 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
48 ProcessTimes = namedtuple('ProcessTimes', 'kernel user')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
49
85
741ae3391b61 Moved clock/time detection into platform-specific modules and testcases
Oleg Oshmyan <chortos@inbox.lv>
parents: 82
diff changeset
50 __all__ = 'call', 'kill', 'terminate', 'pause', 'clock'
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
51
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
52
95
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
53 from functools import wraps
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
54 pathext = [''] + os.environ['PATHEXT'].split(';')
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
55 @wraps(subprocess.Popen)
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
56 def Popen(cmdline, *args, **kwargs):
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
57 try:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
58 return subprocess.Popen(cmdline, *args, **kwargs)
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
59 except WindowsError:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
60 for ext in pathext:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
61 path = cmdline[0] + ext
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
62 newcmdline = type(cmdline)((path,)) + cmdline[1:]
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
63 try:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
64 return subprocess.Popen(newcmdline, *args, **kwargs)
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
65 except WindowsError:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
66 pass
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
67 for branch in HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
68 try:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
69 path = (R'SOFTWARE\Microsoft\Windows\CurrentVersion'
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
70 R'\App Paths\%s%s' % (cmdline[0], ext))
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
71 path = QueryValue(branch, path)
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
72 break
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
73 except WindowsError:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
74 pass
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
75 else:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
76 continue
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
77 if path[0] == '"' == path[-1]:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
78 path = path[1:-1]
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
79 newcmdline = type(cmdline)((path,)) + cmdline[1:]
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
80 try:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
81 return subprocess.Popen(newcmdline, *args, **kwargs)
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
82 except WindowsError:
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
83 pass
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
84 # I'd like to transparently re-raise the exception generated
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
85 # on the very first try, but syntax differences preclude me from
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
86 # doing so in Python 2 and it can't be done at all in Python 3
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
87 raise
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
88
6c2997616bdf Added a search for the location of the executable for Popen on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 91
diff changeset
89
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
90 # Automatically convert _subprocess handle objects into low-level HANDLEs
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
91 # and replicate their functionality for our own use
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
92 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
93 _subprocess_handle = type(GetCurrentProcess())
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
94 except NameError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
95 _subprocess_handle = Integral
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
96 class Handle(object):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
97 @staticmethod
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
98 def from_param(handle):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
99 if isinstance(handle, (_subprocess_handle, Integral)):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
100 return HANDLE(int(handle))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
101 elif isinstance(handle, Handle):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
102 return HANDLE(handle.handle)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
103 elif isinstance(handle, HANDLE):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
104 return handle
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
105 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
106 raise TypeError('cannot convert %s to a handle' %
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
107 type(handle).__name__)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
108
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
109 __slots__ = 'handle'
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
110
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
111 def __init__(self, handle):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
112 if isinstance(handle, Integral):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
113 self.handle = handle
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
114 elif isinstance(handle, HANDLE):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
115 self.handle = handle.value
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
116 elif isinstance(handle, Handle):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
117 self.handle = handle.handle
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
118 elif isinstance(handle, _subprocess_handle):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
119 handle = HANDLE(int(handle))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
120 flags = DWORD()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
121 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
122 if windll.kernel32.GetHandleInformation(handle, byref(flags)):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
123 flags = flags.value
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
124 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
125 flags = 0
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
126 except AttributeError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
127 # Available on NT 3.51 and up, NT line only
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
128 flags = 0
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
129 proc = HANDLE(int(GetCurrentProcess()))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
130 handle = DuplicateHandle(proc, handle, proc, 0, flags & 1, 2)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
131 self.handle = handle.Detach()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
132 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
133 raise TypeError("Handle() argument must be a handle, not '%s'" %
81
24752db487c5 Fixed errors in the win32 module
Oleg Oshmyan <chortos@inbox.lv>
parents: 80
diff changeset
134 type(handle).__name__)
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
135
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
136 def __int__(self):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
137 return int(self.handle)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
138
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
139 def Detach(self):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
140 handle = self.handle
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
141 self.handle = None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
142 return handle
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
143
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
144 # This is also __del__, so only locals are accessed
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
145 def Close(self, _CloseHandle=windll.kernel32.CloseHandle, _HANDLE=HANDLE):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
146 if self.handle:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
147 _CloseHandle(_HANDLE(self.handle))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
148 self.handle = None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
149 __del__ = Close
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
150
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
151 CHAR = c_char
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
152 INVALID_HANDLE_VALUE = HANDLE(-1).value
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
153 LPDWORD = POINTER(DWORD)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
154 LPFILETIME = POINTER(FILETIME)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
155 SIZE_T = ULONG_PTR = WPARAM
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
156 ULONGLONG = c_ulonglong
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
157
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
158 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
159 unicode
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
160 except NameError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
161 LPCTSTR = LPCWSTR
81
24752db487c5 Fixed errors in the win32 module
Oleg Oshmyan <chortos@inbox.lv>
parents: 80
diff changeset
162 UNISUFFIX = 'W'
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
163 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
164 LPCTSTR = LPCSTR
81
24752db487c5 Fixed errors in the win32 module
Oleg Oshmyan <chortos@inbox.lv>
parents: 80
diff changeset
165 UNISUFFIX = 'A'
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
166
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
167
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
168 prototype = WINFUNCTYPE(BOOL, Handle,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
169 LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
170 flags = ((1, 'process'),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
171 (2, 'creation'), (2, 'exit'), (2, 'kernel'), (2, 'user'))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
172 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
173 GetProcessTimes = prototype(('GetProcessTimes', windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
174 except AttributeError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
175 # Available on NT 3.5 and up, NT line only
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
176 GetProcessTimes = None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
177 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
178 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
179 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
180 ftimes = [t.dwHighDateTime << 32 | t.dwLowDateTime for t in args[3:]]
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
181 kernel = ftimes[0] / 10000000
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
182 user = ftimes[1] / 10000000
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
183 return ProcessTimes(kernel, user)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
184 GetProcessTimes.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
185
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
186
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
187 class PROCESS_MEMORY_COUNTERS(Structure):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
188 _fields_ = (('cb', DWORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
189 ('PageFaultCount', DWORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
190 ('PeakWorkingSetSize', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
191 ('WorkingSetSize', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
192 ('QuotaPeakPagedPoolUsage', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
193 ('QuotaPagedPoolUsage', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
194 ('QuotaPeakNonPagedPoolUsage', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
195 ('QuotaNonPagedPoolUsage', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
196 ('PagefileUsage', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
197 ('PeakPagefileUsage', SIZE_T))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
198
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
199 prototype = WINFUNCTYPE(BOOL, Handle, POINTER(PROCESS_MEMORY_COUNTERS), DWORD)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
200 flags = ((1, 'process'), (2, 'counters'),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
201 (5, 'cb', sizeof(PROCESS_MEMORY_COUNTERS)))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
202 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
203 GetProcessMemoryInfo = prototype(('GetProcessMemoryInfo', windll.psapi),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
204 flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
205 except AttributeError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
206 # Available on NT 4.0 and up, NT line only
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
207 GetProcessMemoryInfo = None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
208 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
209 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
210 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
211 return args
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
212 GetProcessMemoryInfo.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
213
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
214
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
215 class _uChar_union(Union):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
216 _fields_ = (('UnicodeChar', WCHAR),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
217 ('AsciiChar', CHAR))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
218
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
219 class KEY_EVENT_RECORD(Structure):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
220 _fields_ = (('bKeyDown', BOOL),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
221 ('wRepeatCount', WORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
222 ('wVirtualKeyCode', WORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
223 ('wVirtualScanCode', WORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
224 ('uChar', _uChar_union),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
225 ('dwControlKeyState', DWORD))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
226
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
227 RIGHT_ALT_PRESSED = 0x001
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
228 LEFT_ALT_PRESSED = 0x002
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
229 RIGHT_CTRL_PRESSED = 0x004
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
230 LEFT_CTRL_PRESSED = 0x008
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
231 SHIFT_PRESSED = 0x010
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
232 NUMLOCK_ON = 0x020
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
233 SCROLLLOCK_ON = 0x040
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
234 CAPSLOCK_ON = 0x080
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
235 ENHANCED_KEY = 0x100
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
236
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
237 class _Event_union(Union):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
238 _fields_ = ('KeyEvent', KEY_EVENT_RECORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
239
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
240 class INPUT_RECORD(Structure):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
241 _fields_ = (('EventType', WORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
242 ('Event', _Event_union))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
243
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
244 KEY_EVENT = 0x01
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
245 MOUSE_EVENT = 0x02
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
246 WINDOW_BUFFER_SIZE_EVENT = 0x04
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
247 MENU_EVENT = 0x08
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
248 FOCUS_EVENT = 0x10
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
249
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
250 prototype = WINFUNCTYPE(BOOL, Handle, POINTER(INPUT_RECORD), DWORD, LPDWORD)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
251 flags = (1, 'input'), (2, 'buffer'), (5, 'length', 1), (2, 'number_read')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
252 ReadConsoleInput = prototype(('ReadConsoleInputA', windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
253 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
254 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
255 return args[1] if args[3] else None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
256 ReadConsoleInput.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
257
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
258
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
259 prototype = WINFUNCTYPE(BOOL, Handle)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
260 flags = (1, 'input'),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
261 FlushConsoleInputBuffer = prototype(('FlushConsoleInputBuffer',
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
262 windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
263 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
264 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
265 FlushConsoleInputBuffer.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
266
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
267
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
268 prototype = WINFUNCTYPE(BOOL, Handle, DWORD)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
269 flags = (1, 'console'), (1, 'mode')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
270 SetConsoleMode = prototype(('SetConsoleMode', windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
271 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
272 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
273 SetConsoleMode.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
274
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
275 ENABLE_PROCESSED_INPUT = 0x001
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
276 ENABLE_LINE_INPUT = 0x002
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
277 ENABLE_ECHO_INPUT = 0x004
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
278 ENABLE_WINDOW_INPUT = 0x008
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
279 ENABLE_MOUSE_INPUT = 0x010
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
280 ENABLE_INSERT_MODE = 0x020
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
281 ENABLE_QUICK_EDIT_MODE = 0x040
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
282 ENABLE_EXTENDED_FLAGS = 0x080
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
283
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
284 ENABLE_PROCESSED_OUTPUT = 1
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
285 ENABLE_WRAP_AT_EOL_OUTPUT = 2
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
286
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
287
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
288 prototype = WINFUNCTYPE(HANDLE, c_void_p, LPCTSTR)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
289 flags = (5, 'attributes'), (1, 'name')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
290 try:
81
24752db487c5 Fixed errors in the win32 module
Oleg Oshmyan <chortos@inbox.lv>
parents: 80
diff changeset
291 CreateJobObject = prototype(('CreateJobObject'+UNISUFFIX, windll.kernel32),
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
292 flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
293 except AttributeError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
294 # Available on 2000 and up, NT line only
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
295 CreateJobObject = lambda name: None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
296 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
297 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
298 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
299 return Handle(result)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
300 CreateJobObject.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
301
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
302
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
303 prototype = WINFUNCTYPE(BOOL, Handle, Handle)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
304 flags = (1, 'job'), (1, 'handle')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
305 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
306 AssignProcessToJobObject = prototype(('AssignProcessToJobObject',
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
307 windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
308 except AttributeError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
309 # Available on 2000 and up, NT line only
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
310 AssignProcessToJobObject = lambda job, handle: None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
311 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
312 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
313 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
314 AssignProcessToJobObject.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
315
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
316
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
317 class JOBOBJECT_BASIC_LIMIT_INFORMATION(Structure):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
318 _fields_ = (('PerProcessUserTimeLimit', LARGE_INTEGER),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
319 ('PerJobUserTimeLimit', LARGE_INTEGER),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
320 ('LimitFlags', DWORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
321 ('MinimumWorkingSetSize', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
322 ('MaximumWorkingSetSize', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
323 ('ActiveProcessLimit', DWORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
324 ('Affinity', ULONG_PTR),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
325 ('PriorityClass', DWORD),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
326 ('SchedulingClass', DWORD))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
327
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
328 JOB_OBJECT_LIMIT_WORKINGSET = 0x0001
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
329 JOB_OBJECT_LIMIT_PROCESS_TIME = 0x0002
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
330 JOB_OBJECT_LIMIT_JOB_TIME = 0x0004
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
331 JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x0008
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
332 JOB_OBJECT_LIMIT_AFFINITY = 0x0010
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
333 JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x0020
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
334 JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x0040
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
335 JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x0080
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
336 JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x0100
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
337 JOB_OBJECT_LIMIT_JOB_MEMORY = 0x0200
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
338 JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x0400
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
339 JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x0800
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
340 JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x1000
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
341 JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x2000
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
342 JOB_OBJECT_LIMIT_SUBSET_AFFINITY = 0x4000
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
343
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
344 class IO_COUNTERS(Structure):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
345 _fields_ = (('ReadOperationCount', ULONGLONG),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
346 ('WriteOperationCount', ULONGLONG),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
347 ('OtherOperationCount', ULONGLONG),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
348 ('ReadTransferCount', ULONGLONG),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
349 ('WriteTransferCount', ULONGLONG),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
350 ('OtherTransferCount', ULONGLONG))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
351
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
352 class JOBOBJECT_EXTENDED_LIMIT_INFORMATION(Structure):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
353 _fields_ = (('BasicLimitInformation', JOBOBJECT_BASIC_LIMIT_INFORMATION),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
354 ('IoInfo', IO_COUNTERS),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
355 ('ProcessMemoryLimit', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
356 ('JobMemoryLimit', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
357 ('PeakProcessMemoryUsed', SIZE_T),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
358 ('PeakJobMemoryUsed', SIZE_T))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
359
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
360 prototype = WINFUNCTYPE(BOOL, Handle, c_int, c_void_p, DWORD)
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
361 flags = (1, 'job'), (1, 'infoclass'), (1, 'info'), (1, 'infosize')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
362 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
363 _setjobinfo = prototype(('SetInformationJobObject',windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
364 except AttributeError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
365 # Available on 2000 and up, NT line only
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
366 SetInformationJobObject = lambda job, infoclass, info: None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
367 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
368 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
369 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
370 _setjobinfo.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
371 def SetInformationJobObject(job, infoclass, info):
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
372 return _setjobinfo(job, infoclass, byref(info), sizeof(info))
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
373
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
374 (
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
375 JobObjectBasicAccountingInformation,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
376 JobObjectBasicLimitInformation,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
377 JobObjectBasicProcessIdList,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
378 JobObjectBasicUIRestrictions,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
379 JobObjectSecurityLimitInformation,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
380 JobObjectEndOfJobTimeInformation,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
381 JobObjectAssociateCompletionPortInformation,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
382 JobObjectBasicAndIoAccountingInformation,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
383 JobObjectExtendedLimitInformation,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
384 JobObjectJobSetInformation,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
385 MaxJobObjectInfoClass
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
386 ) = range(1, 12)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
387
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
388
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
389 prototype = WINFUNCTYPE(DWORD, DWORD, POINTER(HANDLE), BOOL, DWORD)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
390 flags = (1, 'count'), (1, 'handles'), (1, 'wait_all'), (1, 'milliseconds')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
391 _wait_multiple = prototype(('WaitForMultipleObjects', windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
392 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
393 if result == WAIT_FAILED: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
394 return args
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
395 _wait_multiple.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
396 def WaitForMultipleObjects(handles, wait_all, timeout):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
397 n = len(handles)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
398 handles = (Handle.from_param(handle) for handle in handles)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
399 timeout = ceil(timeout * 1000)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
400 return _wait_multiple(n, (HANDLE * n)(*handles), wait_all, timeout)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
401
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
402 # WAIT_OBJECT_0 defined at the top of the file
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
403 WAIT_ABANDONED_0 = 0x00000080
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
404 WAIT_TIMEOUT = 0x00000102
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
405 WAIT_FAILED = 0xFFFFFFFF
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
406
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
407
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
408 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
409 _wait_single = WaitForSingleObject
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
410 except NameError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
411 prototype = WINFUNCTYPE(DWORD, Handle, DWORD)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
412 flags = (1, 'handle'), (1, 'milliseconds')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
413 _wait_single = prototype(('WaitForSingleObject', windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
414 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
415 if result == WAIT_FAILED: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
416 return args
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
417 _wait_single.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
418 def WaitForSingleObject(handle, timeout):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
419 return _wait_single(handle, ceil(timeout * 1000))
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
420
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
421
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
422 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
423 GetStdHandle
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
424 except NameError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
425 prototype = WINFUNCTYPE(HANDLE, DWORD)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
426 flags = (1, 'which'),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
427 GetStdHandle = prototype(('GetStdHandle', windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
428 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
429 if result == INVALID_HANDLE_VALUE: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
430 return args if result else None
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
431 GetStdHandle.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
432
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
433
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
434 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
435 TerminateProcess
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
436 except NameError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
437 prototype = WINFUNCTYPE(BOOL, Handle, UINT)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
438 flags = (1, 'process'), (1, 'exitcode')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
439 TerminateProcess = prototype(('TerminateProcess', windll.kernel32), flags)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
440 def errcheck(result, func, args):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
441 if not result: raise WinError()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
442 TerminateProcess.errcheck = errcheck
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
443
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
444
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
445 # Do not show error messages due to errors in the program being tested
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
446 try:
81
24752db487c5 Fixed errors in the win32 module
Oleg Oshmyan <chortos@inbox.lv>
parents: 80
diff changeset
447 errmode = windll.kernel32.GetErrorMode()
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
448 except AttributeError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
449 # GetErrorMode is available on Vista/2008 and up
81
24752db487c5 Fixed errors in the win32 module
Oleg Oshmyan <chortos@inbox.lv>
parents: 80
diff changeset
450 errmode = windll.kernel32.SetErrorMode(0)
24752db487c5 Fixed errors in the win32 module
Oleg Oshmyan <chortos@inbox.lv>
parents: 80
diff changeset
451 windll.kernel32.SetErrorMode(errmode | 0x8003)
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
452
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
453 stdin = GetStdHandle(STD_INPUT_HANDLE)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
454 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
455 SetConsoleMode(stdin, ENABLE_PROCESSED_INPUT)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
456 except WindowsError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
457 console_input = False
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
458 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
459 console_input = True
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
460 FlushConsoleInputBuffer(stdin)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
461
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
462 def call(*args, **kwargs):
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
463 case = kwargs.pop('case')
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
464 job = CreateJobObject(None)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
465 flags = 0
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
466 if case.maxcputime:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
467 flags |= JOB_OBJECT_LIMIT_PROCESS_TIME
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
468 if case.maxmemory:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
469 flags |= JOB_OBJECT_LIMIT_PROCESS_MEMORY
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
470 limits = JOBOBJECT_EXTENDED_LIMIT_INFORMATION(
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
471 JOBOBJECT_BASIC_LIMIT_INFORMATION(
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
472 PerProcessUserTimeLimit=ceil((case.maxcputime or 0)*10000000),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
473 LimitFlags=flags,
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
474 ),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
475 ProcessMemoryLimit=ceil((case.maxmemory or 0)*1048576),
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
476 )
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
477 SetInformationJobObject(job, JobObjectExtendedLimitInformation, limits)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
478 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
479 case.process = Popen(*args, **kwargs)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
480 except OSError:
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
481 raise testcases.CannotStartTestee(sys.exc_info()[1])
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
482 case.time_started = clock()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
483 AssignProcessToJobObject(job, case.process._handle)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
484 if not console_input:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
485 if case.maxwalltime:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
486 if (WaitForSingleObject(case.process._handle, case.maxwalltime) !=
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
487 WAIT_OBJECT_0):
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
488 raise testcases.WallTimeLimitExceeded
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
489 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
490 case.process.wait()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
491 else:
121
72c02b640dcf Escape presses simultaneous with the testee exiting no longer cancel on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 120
diff changeset
492 handles = case.process._handle, stdin
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
493 if case.maxwalltime:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
494 time_end = clock() + case.maxwalltime
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
495 while case.process.poll() is None:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
496 remaining = time_end - clock()
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
497 if remaining > 0:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
498 if (WaitForMultipleObjects(handles, False, remaining) ==
121
72c02b640dcf Escape presses simultaneous with the testee exiting no longer cancel on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 120
diff changeset
499 WAIT_OBJECT_0 + 1):
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
500 ir = ReadConsoleInput(stdin)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
501 if (ir and
120
08a1d6cc5948 Named a magic number that had sneaked into win32.py
Oleg Oshmyan <chortos@inbox.lv>
parents: 117
diff changeset
502 ir.EventType == KEY_EVENT and
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
503 ir.Event.KeyEvent.bKeyDown and
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
504 ir.Event.KeyEvent.wVirtualKeyCode == 27):
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
505 raise testcases.CanceledByUser
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
506 else:
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
507 raise testcases.WallTimeLimitExceeded
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
508 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
509 while case.process.poll() is None:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
510 if (WaitForMultipleObjects(handles, False, INFINITE) ==
121
72c02b640dcf Escape presses simultaneous with the testee exiting no longer cancel on Win32
Oleg Oshmyan <chortos@inbox.lv>
parents: 120
diff changeset
511 WAIT_OBJECT_0 + 1):
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
512 ir = ReadConsoleInput(stdin)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
513 if (ir and
120
08a1d6cc5948 Named a magic number that had sneaked into win32.py
Oleg Oshmyan <chortos@inbox.lv>
parents: 117
diff changeset
514 ir.EventType == KEY_EVENT and
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
515 ir.Event.KeyEvent.bKeyDown and
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
516 ir.Event.KeyEvent.wVirtualKeyCode == 27):
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
517 raise testcases.CanceledByUser
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
518 case.time_stopped = clock()
117
6bb59a011bcb Wall-clock time is output when maxwalltime but not maxcputime now on Win32 too
Oleg Oshmyan <chortos@inbox.lv>
parents: 95
diff changeset
519 if GetProcessTimes and (case.maxcputime or not case.maxwalltime):
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
520 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
521 times = GetProcessTimes(case.process._handle)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
522 except WindowsError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
523 pass
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
524 else:
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
525 time = times.kernel + times.user
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
526 case.time_stopped = time
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
527 case.time_started = 0
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
528 case.time_limit_string = case.cpu_time_limit_string
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
529 if case.maxcputime and time > case.maxcputime:
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
530 raise testcases.CPUTimeLimitExceeded
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
531 if case.maxcputime and case.process.returncode == 1816:
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
532 raise testcases.CPUTimeLimitExceeded
80
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
533 if case.maxmemory and GetProcessMemoryInfo:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
534 try:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
535 counters = GetProcessMemoryInfo(case.process._handle)
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
536 except WindowsError:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
537 pass
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
538 else:
809b77302b21 Win32-specific module with memory and CPU time limits
Oleg Oshmyan <chortos@inbox.lv>
parents:
diff changeset
539 if counters.PeakPagefileUsage > case.maxmemory * 1048576:
82
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
540 raise testcases.MemoryLimitExceeded
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
541
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
542
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
543 def kill(process):
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
544 try:
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
545 process.terminate()
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
546 except AttributeError:
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
547 TerminateProcess(process._handle)
06356af50bf9 Finished testcases reorganization and CPU time limit implementation
Oleg Oshmyan <chortos@inbox.lv>
parents: 81
diff changeset
548 terminate = kill