Guido van Rossum | 2cc9b2b | 1995-03-10 15:09:12 +0000 | [diff] [blame] | 1 | *** See the ChangeLog file for bugs fixed since 1.2 BETA 2 *** |
| 2 | |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 3 | Sorry, this list does not claim completeness. If I fixed a bug |
| 4 | immediately upon receiving the first complaint I usually did not |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 5 | nother to make an entry in this file, unless it was a serious bug |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 6 | (core dump or infinite loop). |
| 7 | |
Guido van Rossum | af5b83e | 1995-01-04 19:02:35 +0000 | [diff] [blame] | 8 | ==> Status indicators: (-) not fixed; (*) fixed; (?) not sure. |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 9 | |
| 10 | ====================================================================== |
Guido van Rossum | 2cc9b2b | 1995-03-10 15:09:12 +0000 | [diff] [blame] | 11 | |
Guido van Rossum | 0ddb028 | 1995-01-17 16:46:14 +0000 | [diff] [blame] | 12 | Known BUGS in 1.2 BETA 1, fixed in 1.2 BETA 2 |
| 13 | --------------------------------------------- |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 14 | |
Guido van Rossum | 0ddb028 | 1995-01-17 16:46:14 +0000 | [diff] [blame] | 15 | (*) list slice assignment contains reantrancy bug |
| 16 | |
| 17 | (*) range() and xrange() break on Alpha's |
| 18 | |
| 19 | (*) interactive use of vars() gives barrage of output due to recursive |
| 20 | inclusion of '_' |
| 21 | |
| 22 | (*) configure.in contains bogus name to check for inet library |
| 23 | |
Guido van Rossum | 2cc9b2b | 1995-03-10 15:09:12 +0000 | [diff] [blame] | 24 | Known BUGS in 1.1.1 and 1.2 BETA 3 |
Guido van Rossum | 0ddb028 | 1995-01-17 16:46:14 +0000 | [diff] [blame] | 25 | ---------------------------------- |
| 26 | |
Guido van Rossum | 2cc9b2b | 1995-03-10 15:09:12 +0000 | [diff] [blame] | 27 | (-) still a memory leak in threads when thread.exit_thread() is used |
Guido van Rossum | 0ddb028 | 1995-01-17 16:46:14 +0000 | [diff] [blame] | 28 | |
| 29 | Problems in 1.1.1 that are difficult to solve |
| 30 | --------------------------------------------- |
Guido van Rossum | af5b83e | 1995-01-04 19:02:35 +0000 | [diff] [blame] | 31 | |
| 32 | (-) tkinter seems to leave an exception around sometime which breaks |
| 33 | unmarshalling code objects [hard to reproduce, have added a trap to |
Guido van Rossum | 79dddcb | 1995-01-12 12:25:42 +0000 | [diff] [blame] | 34 | marshal.c to catch it] |
Guido van Rossum | af5b83e | 1995-01-04 19:02:35 +0000 | [diff] [blame] | 35 | |
| 36 | (-) destroying all modules may destroy __builtin__ (or other modules) |
| 37 | while destructors of other modules may still need it [hard to fix -- |
| 38 | could maintain a list of all modules in order of importation so we can |
| 39 | destroy them in reverse order??? really hopeless -- would have to |
| 40 | destroy objects in a module in reverse order too...] |
| 41 | |
Guido van Rossum | 8a30adc | 1995-01-09 17:54:07 +0000 | [diff] [blame] | 42 | (-) doneimport() should be called *before* the Py_AtExit code is |
| 43 | called [problem: what if other threads are still active?] |
Guido van Rossum | af5b83e | 1995-01-04 19:02:35 +0000 | [diff] [blame] | 44 | |
Guido van Rossum | 79dddcb | 1995-01-12 12:25:42 +0000 | [diff] [blame] | 45 | Known portability problems |
| 46 | -------------------------- |
Guido van Rossum | af5b83e | 1995-01-04 19:02:35 +0000 | [diff] [blame] | 47 | |
Guido van Rossum | 79dddcb | 1995-01-12 12:25:42 +0000 | [diff] [blame] | 48 | (-) tkinter doesn't seem to see any declaration of malloc on sunos |
| 49 | 4.1.3? |
Guido van Rossum | af5b83e | 1995-01-04 19:02:35 +0000 | [diff] [blame] | 50 | |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 51 | (-) arraymodule doesn't compile under Ultrix (FPROTO macro) |
| 52 | |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 53 | (-) makesetup assumes CCC is the C++ compiler -- not portable |
| 54 | |
| 55 | (-) "make depend" assumes mkdep exists -- not portable |
| 56 | |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 57 | (-) regen calls h2py which isn't defined by default |
| 58 | |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 59 | (-) HP doesn't compile out of the box (needs LIBS=-ldld or |
Guido van Rossum | 8a30adc | 1995-01-09 17:54:07 +0000 | [diff] [blame] | 60 | LIBS=/usr/lib/libdld.sl) [hard to test without a HP machine handy] |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 61 | |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 62 | ====================================================================== |
| 63 | BUGS present in 1.1.1 and fixed in 1.2 |
| 64 | -------------------------------------- |
| 65 | |
Guido van Rossum | 2cc9b2b | 1995-03-10 15:09:12 +0000 | [diff] [blame] | 66 | (*) Linux uses GNU getopt by default which is broken |
| 67 | |
| 68 | (*) make sharedinstall references to machdep directory but doesn't |
| 69 | create it |
| 70 | |
| 71 | (*) a file with unmatched triple quotes causes a loop in the scanner |
| 72 | |
| 73 | (*) [X]DECREF can cause the interpreter to be called recursively (for |
| 74 | __del__ disciplines) -- so list and dict implementation calls doing |
| 75 | DECREF can cause recursive calls to methods of the object being |
| 76 | modified. Other files too. |
| 77 | |
Guido van Rossum | 79dddcb | 1995-01-12 12:25:42 +0000 | [diff] [blame] | 78 | (*) if __getattr__ or __repr__ prints something, calling repr(x) from |
| 79 | cmd line forgets a newline |
| 80 | |
| 81 | (*) C-level coerce() doesn't call __coerce__ when it should (and |
| 82 | similar for __cmp__) |
| 83 | |
Guido van Rossum | 8a30adc | 1995-01-09 17:54:07 +0000 | [diff] [blame] | 84 | (*) struct module aligns doubles wrongly when compiled with -DDEBUG on |
| 85 | sparc |
| 86 | |
Guido van Rossum | af5b83e | 1995-01-04 19:02:35 +0000 | [diff] [blame] | 87 | (*) memory leak (namebuf) in initmodule2 |
| 88 | |
| 89 | (*) hash() of float values returns bogus values |
| 90 | |
| 91 | (*) pow(int, int, long) does wrong series of DECREF() calls. |
| 92 | |
| 93 | (*) flushline() may clear the exception condition so shouldn't be |
| 94 | called before print_error() |
| 95 | |
| 96 | (*) Everything else that uses err_get() should use err_fetch() |
| 97 | |
| 98 | (*) sockets aren't thread safe (address of static struct returned, |
| 99 | some calls aren't thread safe) |
| 100 | |
| 101 | (*) threadmodule.c leaks LOTS of memory at thread exit |
| 102 | |
| 103 | (*) shared install in Modules still doesn't work for empty list |
| 104 | |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 105 | (*) threadmodule.c leaks 'res' in t_bootstrap |
| 106 | |
| 107 | (*) errors.c shouldn't declare strerror() on NT |
| 108 | |
| 109 | (*) DECREF can cause the interpreter to be called recursively (for |
| 110 | __del__ disciplines) -- so list and dict implementation calls doing |
| 111 | DECREF can cause recursive calls to methods of the object being |
| 112 | modified. Other files too. (Only partially fixed.) |
| 113 | |
| 114 | (*) tkinter dereferences NULL if timer callback raises an exception |
| 115 | |
| 116 | (*) must link with -lieee for linux |
| 117 | |
| 118 | (*) if a timer handler routine raises an exception, the interpreter |
| 119 | dereferences NULL |
| 120 | |
| 121 | (*) __getattr__ doesn't clear error |
| 122 | |
| 123 | (*) '%s' % a, where a is a class instance, fails |
| 124 | |
| 125 | (*) "make test" won't find freshly built dynamically loaded modules -- |
| 126 | should add ./Modules to TESTPATH |
| 127 | |
| 128 | (*) lshift calls __rshift__ instead of __rlshift__ |
| 129 | |
| 130 | (*) memory leak in creation of sys.builtin_module_names |
| 131 | |
| 132 | (*) Bugs in instance_dealloc(): (a) memory leak for exception |
| 133 | type+value; (2) should save+restore traceback as well |
| 134 | |
| 135 | (*) modsupport.c(vmkvalue): on systems where va_list is an array, the |
| 136 | calls to do_mkvalue and do_mktuple don't want an "&" before va. |
| 137 | |
| 138 | ====================================================================== |
Guido van Rossum | 9444ce0 | 1994-10-20 22:10:23 +0000 | [diff] [blame] | 139 | BUGS found in 1.1 and fixed in 1.1.1 |
| 140 | ------------------------------------ |
| 141 | |
Guido van Rossum | 5dee5e7 | 1994-11-10 23:06:54 +0000 | [diff] [blame] | 142 | (*) printing name of lambda in traceback dereferences NULL |
| 143 | |
| 144 | (*) A built-in function using getargs() and expecting >= 1 argument |
| 145 | may dump core when called without arguments |
| 146 | |
| 147 | (*) newgetargs() dumps core in compat mode when NULL is passed in but |
| 148 | max is >0 |
| 149 | |
Guido van Rossum | 9444ce0 | 1994-10-20 22:10:23 +0000 | [diff] [blame] | 150 | (*) pow() should be declared varargs since it uses newgetargs |
| 151 | |
Guido van Rossum | 5dee5e7 | 1994-11-10 23:06:54 +0000 | [diff] [blame] | 152 | (*) newmodule.c doesn't compile on SunOS 4.1.3 due to non-K&R backslashes |
| 153 | |
| 154 | (*) some typos in tut.tex |
| 155 | |
| 156 | (*) test for broken static forward is not strong enough |
| 157 | |
| 158 | (*) Doc/Makefile assumes . is in $PATH in call to whichlibs |
| 159 | |
| 160 | (*) math module misses hypot() function |
| 161 | |
| 162 | (*) structmember.h should include stddef.h (for offsetof macro) |
| 163 | |
| 164 | (*) gdbmmodule.c frees the wrong structures |
| 165 | |
| 166 | (*) makesetup script misses some dollars and backslashes |
| 167 | |
| 168 | (*) getargs.obj missing from NT makefile |
| 169 | |
| 170 | (*) sorting class instances broken if no __cmp__ defined |
| 171 | |
Guido van Rossum | 5dee5e7 | 1994-11-10 23:06:54 +0000 | [diff] [blame] | 172 | ====================================================================== |
Guido van Rossum | 9444ce0 | 1994-10-20 22:10:23 +0000 | [diff] [blame] | 173 | BUGS found in 1.0.3 and fixed in 1.1 |
| 174 | ------------------------------------ |
| 175 | |
Guido van Rossum | 76be6ed | 1995-01-02 18:33:54 +0000 | [diff] [blame] | 176 | (*) 2 specific leaks: 1 PYTHONPATH; 2 reading code from .pyc |
| 177 | |
Guido van Rossum | 9444ce0 | 1994-10-20 22:10:23 +0000 | [diff] [blame] | 178 | (*) If class C doesn't define __cmp__, cmp(a,b) will return -2 and |
| 179 | [a,b].sort() will fail |
| 180 | |
Guido van Rossum | 2b11c61 | 1994-10-06 16:36:15 +0000 | [diff] [blame] | 181 | (*) Syntax errors are reported in a silly way if multi-line tokens are |
Guido van Rossum | fda5fb2 | 1994-08-12 13:18:41 +0000 | [diff] [blame] | 182 | involved. |
| 183 | |
Guido van Rossum | 2b11c61 | 1994-10-06 16:36:15 +0000 | [diff] [blame] | 184 | (*) SyntaxError exception for compile('...') are reported wrongly |
Guido van Rossum | fda5fb2 | 1994-08-12 13:18:41 +0000 | [diff] [blame] | 185 | (lineno is always zero and offset is offset into the whole string). |
| 186 | |
Guido van Rossum | 2b11c61 | 1994-10-06 16:36:15 +0000 | [diff] [blame] | 187 | (*) freeze script needs major rewrite to cope with multiple extensions |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 188 | (Jack seems to have fixed it now -- where is it?) |
| 189 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 190 | (*) unwanted entries in stack trace if err_clear() clears an error |
| 191 | that also set a stack trace |
| 192 | |
| 193 | (*) i, x[i] = a, b assigns b to x[a] rather than to x[i] as expected |
| 194 | (documented with a warning in ref6.tex!) |
| 195 | |
| 196 | (*) etags no longer supports -t flag |
| 197 | |
| 198 | (*) compile.c:com_argdefs() references unalloc'ed memory for def |
| 199 | f(a=1,): ... |
| 200 | |
| 201 | (*) If you have a python binary in your path like |
Guido van Rossum | fda5fb2 | 1994-08-12 13:18:41 +0000 | [diff] [blame] | 202 | /ufs/guido/bin/sgi/python then the default prefix option computed by |
| 203 | the configure script is bogus! |
| 204 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 205 | (*) Make rule for making lib*.a should remove the lib*.a file first. |
Guido van Rossum | fda5fb2 | 1994-08-12 13:18:41 +0000 | [diff] [blame] | 206 | |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 207 | (*) vars() error message is wrong (copied from dir() obviously). |
| 208 | |
| 209 | (*) socket.gethostname() is undocumented. |
| 210 | |
| 211 | (*) rfc822.py: getfirst* dies when multiple headers occur |
| 212 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 213 | (*) urllib caching is wrong (should use date from Expires header) |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 214 | |
| 215 | (*) On a related matter: regexpr.c still has two malloc()s the results |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 216 | of which are not tested for being NULL (lines 1253 and 1530). There |
| 217 | are also some in rgbimagemodule.c. Am I overlooking something or is |
Guido van Rossum | fda5fb2 | 1994-08-12 13:18:41 +0000 | [diff] [blame] | 218 | this a crasher? |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 219 | |
| 220 | (*) strop.rindex('abc', '') returns 0 instead of 3 |
| 221 | |
| 222 | (*) sunaudiodevmodule.o is too long! |
| 223 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 224 | (*) toplevel README needs new text on PC and Mac builds |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 225 | |
| 226 | (*) long(0x80000000) has wrong value! |
| 227 | |
| 228 | ====================================================================== |
| 229 | Bugs found in 1.0.2 and not yet fixed |
| 230 | ------------------------------------- |
| 231 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 232 | (?) compiler warnings about argument type of uname() on ULTRIX |
| 233 | machines (don't know what to do about it) |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 234 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 235 | (?) syntax error for interactive input prints garbage instead of last |
| 236 | source line on some systems (e.g. AIX) (impossible to test/reproduce) |
| 237 | !!! I think I've found this one -- a missing INCREF in print_error! |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 238 | |
| 239 | (?) (maybe) a bad .pyc file (with old magic number) causes the .py |
| 240 | file to be ignored |
| 241 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 242 | (?) Sunos4.0.2 / 386 configure bugs: |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 243 | - timelocal instead of mktime |
| 244 | - unistd.h doesn't declare some functions |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 245 | (don't know what to do about this) |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 246 | |
| 247 | Bugs found in 1.0.2 and fixed in 1.0.3 |
| 248 | -------------------------------------- |
| 249 | |
| 250 | (*) nasty bug in string formatting (see test_types.py, search for %) |
| 251 | |
| 252 | (*) if a triple-quoted string ends in a quote followed by a newline |
| 253 | (followed immediately by the terminating 3 quotes) then a syntax error |
| 254 | or system error ensues |
| 255 | |
| 256 | (*) bug in socket.listen: clipping backlog to >= 1 doesn't work |
| 257 | |
| 258 | (*) two bogus XDEL's in Modules/regexmodule.reg_dealloc() |
| 259 | |
| 260 | (*) Parser/myreadline.my_fgets: #endif EINTR misplaced |
| 261 | |
| 262 | (*) new IP address for ftp.cwi.nl !!! |
| 263 | |
| 264 | (*) typing vars() to interactive prompt runs into infinite loop |
| 265 | because of '_' |
| 266 | |
| 267 | (*) tokenizer/tok_nextc() runs into infinite loop when file does not |
| 268 | end in linefeed |
| 269 | |
| 270 | (*) Sunos4.0.2 / 386 configure bugs: |
| 271 | (*) - use size_t at some places without including sys/types.h |
| 272 | (*) - missing clock_t |
| 273 | (*) - uses SEEK_SET in some places that don't include unistd.h |
| 274 | |
| 275 | ====================================================================== |
| 276 | Bugs found in 1.0.1 and not yet fixed |
| 277 | ------------------------------------- |
| 278 | |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 279 | (?) threads are slow on Solaris 2 |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 280 | (so what?) |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 281 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 282 | (*) threads cause myreadline.c's readline() to think it sees an EOF. |
| 283 | (I *think* I've fixed this, by testing for EINTR) |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 284 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 285 | (?) min() on PC version generates wrong result (i.e. same as max()) |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 286 | [this happens on SoftPC -- don't know about other systems] |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 287 | (can't find the reason -- may be SoftPC bug) |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 288 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 289 | (*) flp.py cache bug: if the cache only contains one form, asking for |
| 290 | all forms returns only the cached form |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 291 | |
| 292 | Bugs found in 1.0.1 and fixed in 1.0.2 |
| 293 | -------------------------------------- |
| 294 | |
| 295 | (*) core dump when parser.parsefile() called |
| 296 | |
| 297 | (*) man page contains a mess before -d option |
| 298 | |
| 299 | (*) threads don't work on IRIX 4 |
| 300 | |
| 301 | (*) wrong cast of svideo_getattr in svmodule.c |
| 302 | |
| 303 | (*) bad return value in runpython.c's run_tty_1() |
| 304 | |
| 305 | (*) creating dict of 100,000 objects gets MemoryError or dumps core |
| 306 | |
| 307 | (*) freeze script doesn't work |
| 308 | |
| 309 | ====================================================================== |
| 310 | BUGS found in 1.0.0 and not yet fixed |
| 311 | ------------------------------------- |
| 312 | |
| 313 | (?) On NeXT, need to define _POSIX_SOURCE. |
| 314 | |
| 315 | (?) there appears to be something wrong with gcc and -ldl on some |
| 316 | SunOS 4.1.3 systems |
| 317 | |
Guido van Rossum | c561e5d | 1994-08-23 13:52:46 +0000 | [diff] [blame] | 318 | (?) jredfords reports core dump with float literals |
Guido van Rossum | 5552eb7 | 1994-08-05 15:51:00 +0000 | [diff] [blame] | 319 | |
| 320 | BUGS found in 1.0.0 and fixed in 1.0.1 |
| 321 | -------------------------------------- |
| 322 | |
| 323 | (*) On SGI IRIX 4 using cc, compilation errors in md5module.c. |
| 324 | |
| 325 | (*) In cdmodule.c, getattr initialized with (destructor)! |
| 326 | |
| 327 | (*) Lib/tzparse.py runs test() on import |
| 328 | |
| 329 | (*) Lib/filewin.py belongs in Lib/stdwin |
| 330 | |
| 331 | (*) lib and man install targets don't use $(srcdir) |
| 332 | |
| 333 | (*) Modules/rgbimgmodule.c: exception name contains comma instead of dot |
| 334 | |
| 335 | (*) The FAQ still references misc/EXTENDING and misc/DYNLOAD etc |
| 336 | |
| 337 | (*) The FAQ still describes how to work around a problem in 0.9.9 exec() |
| 338 | |
| 339 | (*) Lib/aifc.py, returns float rate, should be int |
| 340 | |
| 341 | (*) Lib/sunau.py, incorrectly cumputes byte count from frame rate |
| 342 | |
| 343 | (*) README should mention possibility of passing OPT=-g to make |
| 344 | |
| 345 | (*) dynamic loading on sunos 4.1.3 must call dlopen(..., 1) |
| 346 | |
| 347 | (*) use of <varargs.h> vs. <stdarg.h> should depend on |
| 348 | HAVE_STDARG_PROTOTYPES, not on HAVE_STDARG_H |
| 349 | |
| 350 | (*) Doc/README refers to Misc/FTP which in fact does not exist any more |
| 351 | |
| 352 | (*) filter(None, 'abcdefg') dumps core |
| 353 | |
| 354 | (*) once you interrupt time.sleep(), there is no interrupt handler! |
| 355 | |
| 356 | ====================================================================== |
| 357 | end of file |