Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_thread.py @ 84007:dbfbdf2b5c19 3.3
Fix #17967: For ftp urls CWD to target instead of hopping to each directory
towards target. This fixes a bug where target is accessible, but parent
directories are restricted.
| author | Senthil Kumaran <senthil@uthcode.com> |
|---|---|
| date | Sat, 01 Jun 2013 08:27:06 -0700 |
| parents | 1040e3811485 |
| children | 9ba1f113c3ec |
| rev | line source |
|---|---|
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
1 import os |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
2 import unittest |
|
8394
93aa08c77e60
Use random instead of whrandom.
Guido van Rossum <guido@python.org>
parents:
5845
diff
changeset
|
3 import random |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
45852
diff
changeset
|
4 from test import support |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
59750
diff
changeset
|
5 thread = support.import_module('_thread') |
| 1588 | 6 import time |
|
59235
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
7 import sys |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
8 import weakref |
| 1588 | 9 |
|
57160
fe33562d1f95
Merged revisions 76138,76173 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
10 from test import lock_tests |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
11 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
12 NUMTASKS = 10 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
13 NUMTRIPS = 3 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
14 |
|
45852
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
15 _print_mutex = thread.allocate_lock() |
|
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
16 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
17 def verbose_print(arg): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
18 """Helper function for printing out debugging output.""" |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
45852
diff
changeset
|
19 if support.verbose: |
|
45852
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
20 with _print_mutex: |
|
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
21 print(arg) |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
22 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
23 class BasicThreadTest(unittest.TestCase): |
| 1588 | 24 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
25 def setUp(self): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
26 self.done_mutex = thread.allocate_lock() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
27 self.done_mutex.acquire() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
28 self.running_mutex = thread.allocate_lock() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
29 self.random_mutex = thread.allocate_lock() |
|
56692
96d6c146cfa9
Merged revisions 75634 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47266
diff
changeset
|
30 self.created = 0 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
31 self.running = 0 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
32 self.next_ident = 0 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
33 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
34 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
35 class ThreadRunningTests(BasicThreadTest): |
|
1647
03e097ddeca2
added barrier test (by Tim Peters)
Guido van Rossum <guido@python.org>
parents:
1588
diff
changeset
|
36 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
37 def newtask(self): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
38 with self.running_mutex: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
39 self.next_ident += 1 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
40 verbose_print("creating task %s" % self.next_ident) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
41 thread.start_new_thread(self.task, (self.next_ident,)) |
|
56692
96d6c146cfa9
Merged revisions 75634 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47266
diff
changeset
|
42 self.created += 1 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
43 self.running += 1 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
44 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
45 def task(self, ident): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
46 with self.random_mutex: |
|
45852
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
47 delay = random.random() / 10000.0 |
|
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
48 verbose_print("task %s will run for %sus" % (ident, round(delay*1e6))) |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
49 time.sleep(delay) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
50 verbose_print("task %s done" % ident) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
51 with self.running_mutex: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
52 self.running -= 1 |
|
56692
96d6c146cfa9
Merged revisions 75634 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47266
diff
changeset
|
53 if self.created == NUMTASKS and self.running == 0: |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
54 self.done_mutex.release() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
55 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
56 def test_starting_threads(self): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
57 # Basic test for thread creation. |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
58 for i in range(NUMTASKS): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
59 self.newtask() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
60 verbose_print("waiting for tasks to complete...") |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
61 self.done_mutex.acquire() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
62 verbose_print("all tasks done") |
| 1588 | 63 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
64 def test_stack_size(self): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
65 # Various stack size tests. |
|
59750
74bb0f62b32e
Merged revisions 79127 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59235
diff
changeset
|
66 self.assertEqual(thread.stack_size(), 0, "initial stack size is not 0") |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
67 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
68 thread.stack_size(0) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
57160
diff
changeset
|
69 self.assertEqual(thread.stack_size(), 0, "stack_size not reset to default") |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
70 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
71 if os.name not in ("nt", "os2", "posix"): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
72 return |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
73 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
74 tss_supported = True |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
75 try: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
76 thread.stack_size(4096) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
77 except ValueError: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
78 verbose_print("caught expected ValueError setting " |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
79 "stack_size(4096)") |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
80 except thread.error: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
81 tss_supported = False |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
82 verbose_print("platform does not support changing thread stack " |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
83 "size") |
| 1588 | 84 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
85 if tss_supported: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
86 fail_msg = "stack_size(%d) failed - should succeed" |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
87 for tss in (262144, 0x100000, 0): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
88 thread.stack_size(tss) |
|
66340
2beb25369289
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
57160
diff
changeset
|
89 self.assertEqual(thread.stack_size(), tss, fail_msg % tss) |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
90 verbose_print("successfully set stack_size(%d)" % tss) |
| 1588 | 91 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
92 for tss in (262144, 0x100000): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
93 verbose_print("trying stack_size = (%d)" % tss) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
94 self.next_ident = 0 |
|
56692
96d6c146cfa9
Merged revisions 75634 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47266
diff
changeset
|
95 self.created = 0 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
96 for i in range(NUMTASKS): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
97 self.newtask() |
|
1647
03e097ddeca2
added barrier test (by Tim Peters)
Guido van Rossum <guido@python.org>
parents:
1588
diff
changeset
|
98 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
99 verbose_print("waiting for all tasks to complete") |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
100 self.done_mutex.acquire() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
101 verbose_print("all tasks done") |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
102 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
103 thread.stack_size(0) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
104 |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
105 def test__count(self): |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
106 # Test the _count() function. |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
107 orig = thread._count() |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
108 mut = thread.allocate_lock() |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
109 mut.acquire() |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
110 started = [] |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
111 def task(): |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
112 started.append(None) |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
113 mut.acquire() |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
114 mut.release() |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
115 thread.start_new_thread(task, ()) |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
116 while not started: |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
117 time.sleep(0.01) |
|
59750
74bb0f62b32e
Merged revisions 79127 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59235
diff
changeset
|
118 self.assertEqual(thread._count(), orig + 1) |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
119 # Allow the task to finish. |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
120 mut.release() |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
121 # The only reliable way to be sure that the thread ended from the |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
122 # interpreter's point of view is to wait for the function object to be |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
123 # destroyed. |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
124 done = [] |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
125 wr = weakref.ref(task, lambda _: done.append(None)) |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
126 del task |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
127 while not done: |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
128 time.sleep(0.01) |
|
59750
74bb0f62b32e
Merged revisions 79127 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59235
diff
changeset
|
129 self.assertEqual(thread._count(), orig) |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
130 |
|
76068
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
131 def test_save_exception_state_on_error(self): |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
132 # See issue #14474 |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
133 def task(): |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
134 started.release() |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
135 raise SyntaxError |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
136 def mywrite(self, *args): |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
137 try: |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
138 raise ValueError |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
139 except ValueError: |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
140 pass |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
141 real_write(self, *args) |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
142 c = thread._count() |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
143 started = thread.allocate_lock() |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
144 with support.captured_output("stderr") as stderr: |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
145 real_write = stderr.write |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
146 stderr.write = mywrite |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
147 started.acquire() |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
148 thread.start_new_thread(task, ()) |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
149 started.acquire() |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
150 while thread._count() > c: |
| 76481 | 151 time.sleep(0.01) |
|
76068
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
152 self.assertIn("Traceback", stderr.getvalue()) |
|
60ad83716733
prevent writing to stderr from messing up the exception state (closes #14474)
Benjamin Peterson <benjamin@python.org>
parents:
68257
diff
changeset
|
153 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
154 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
155 class Barrier: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
156 def __init__(self, num_threads): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
157 self.num_threads = num_threads |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
8394
diff
changeset
|
158 self.waiting = 0 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
159 self.checkin_mutex = thread.allocate_lock() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
160 self.checkout_mutex = thread.allocate_lock() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
161 self.checkout_mutex.acquire() |
|
1647
03e097ddeca2
added barrier test (by Tim Peters)
Guido van Rossum <guido@python.org>
parents:
1588
diff
changeset
|
162 |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
8394
diff
changeset
|
163 def enter(self): |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
164 self.checkin_mutex.acquire() |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
8394
diff
changeset
|
165 self.waiting = self.waiting + 1 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
166 if self.waiting == self.num_threads: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
167 self.waiting = self.num_threads - 1 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
168 self.checkout_mutex.release() |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
8394
diff
changeset
|
169 return |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
170 self.checkin_mutex.release() |
|
1647
03e097ddeca2
added barrier test (by Tim Peters)
Guido van Rossum <guido@python.org>
parents:
1588
diff
changeset
|
171 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
172 self.checkout_mutex.acquire() |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
8394
diff
changeset
|
173 self.waiting = self.waiting - 1 |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
8394
diff
changeset
|
174 if self.waiting == 0: |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
175 self.checkin_mutex.release() |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
8394
diff
changeset
|
176 return |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
177 self.checkout_mutex.release() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
178 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
179 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
180 class BarrierTest(BasicThreadTest): |
|
1647
03e097ddeca2
added barrier test (by Tim Peters)
Guido van Rossum <guido@python.org>
parents:
1588
diff
changeset
|
181 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
182 def test_barrier(self): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
183 self.bar = Barrier(NUMTASKS) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
184 self.running = NUMTASKS |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
185 for i in range(NUMTASKS): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
186 thread.start_new_thread(self.task2, (i,)) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
187 verbose_print("waiting for tasks to end") |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
188 self.done_mutex.acquire() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
189 verbose_print("tasks done") |
|
1647
03e097ddeca2
added barrier test (by Tim Peters)
Guido van Rossum <guido@python.org>
parents:
1588
diff
changeset
|
190 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
191 def task2(self, ident): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
192 for i in range(NUMTRIPS): |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
193 if ident == 0: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
194 # give it a good chance to enter the next |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
195 # barrier before the others are all out |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
196 # of the current one |
|
45852
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
197 delay = 0 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
198 else: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
199 with self.random_mutex: |
|
45852
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
200 delay = random.random() / 10000.0 |
|
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
201 verbose_print("task %s will run for %sus" % |
|
30c4e1ca8421
Merged revisions 61431,61433-61436,61439,61444,61449-61450,61453,61458,61465,61468,61471-61474,61480,61483-61484,61488,61495-61496,61498,61503-61504,61507,61509-61510,61515-61518 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45773
diff
changeset
|
202 (ident, round(delay * 1e6))) |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
203 time.sleep(delay) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
204 verbose_print("task %s entering %s" % (ident, i)) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
205 self.bar.enter() |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
206 verbose_print("task %s leaving barrier" % ident) |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
207 with self.running_mutex: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
208 self.running -= 1 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
209 # Must release mutex before releasing done, else the main thread can |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
210 # exit and set mutex to None as part of global teardown; then |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
211 # mutex.release() raises AttributeError. |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
212 finished = self.running == 0 |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
213 if finished: |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
214 self.done_mutex.release() |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
24364
diff
changeset
|
215 |
|
57160
fe33562d1f95
Merged revisions 76138,76173 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
216 class LockTests(lock_tests.LockTests): |
|
fe33562d1f95
Merged revisions 76138,76173 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
217 locktype = thread.allocate_lock |
|
fe33562d1f95
Merged revisions 76138,76173 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
218 |
|
fe33562d1f95
Merged revisions 76138,76173 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56692
diff
changeset
|
219 |
|
59235
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
220 class TestForkInThread(unittest.TestCase): |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
221 def setUp(self): |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
222 self.read_fd, self.write_fd = os.pipe() |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
223 |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
224 @unittest.skipIf(sys.platform.startswith('win'), |
|
59750
74bb0f62b32e
Merged revisions 79127 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59235
diff
changeset
|
225 "This test is only appropriate for POSIX-like systems.") |
|
74bb0f62b32e
Merged revisions 79127 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59235
diff
changeset
|
226 @support.reap_threads |
|
59235
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
227 def test_forkinthread(self): |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
228 def thread1(): |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
229 try: |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
230 pid = os.fork() # fork in a thread |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
231 except RuntimeError: |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
232 os._exit(1) # exit the child |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
233 |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
234 if pid == 0: # child |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
235 try: |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
236 os.close(self.read_fd) |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
237 os.write(self.write_fd, b"OK") |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
238 finally: |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
239 os._exit(0) |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
240 else: # parent |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
241 os.close(self.write_fd) |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
242 |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
243 thread.start_new_thread(thread1, ()) |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
244 self.assertEqual(os.read(self.read_fd, 2), b"OK", |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
245 "Unable to fork() in thread") |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
246 |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
247 def tearDown(self): |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
248 try: |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
249 os.close(self.read_fd) |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
250 except OSError: |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
251 pass |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
252 |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
253 try: |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
254 os.close(self.write_fd) |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
255 except OSError: |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
256 pass |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
257 |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
258 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
259 def test_main(): |
|
59235
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
260 support.run_unittest(ThreadRunningTests, BarrierTest, LockTests, |
|
58c35495a934
Merged revisions 78527,78550 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57130
diff
changeset
|
261 TestForkInThread) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
24364
diff
changeset
|
262 |
|
45773
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
263 if __name__ == "__main__": |
|
832c820e9d14
Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43014
diff
changeset
|
264 test_main() |
