[3.6] bpo-30814: Fixed a race condition when import a submodule from a package. (GH-2580). (#2598)

(cherry picked from commit b4baacee1a)
This commit is contained in:
Serhiy Storchaka 2017-07-06 08:38:24 +03:00 committed by GitHub
parent aaa4f99151
commit 03b0e8374b
7 changed files with 340 additions and 325 deletions

View file

@ -10,6 +10,8 @@ import py_compile
import random
import stat
import sys
import threading
import time
import unittest
import unittest.mock as mock
import textwrap
@ -350,6 +352,32 @@ class ImportTests(unittest.TestCase):
with self.assertRaises(ImportError):
from test_from_import_AttributeError import does_not_exist
def test_concurrency(self):
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'data'))
try:
exc = None
def run():
event.wait()
try:
import package
except BaseException as e:
nonlocal exc
exc = e
for i in range(10):
event = threading.Event()
threads = [threading.Thread(target=run) for x in range(2)]
try:
with test.support.start_threads(threads, event.set):
time.sleep(0)
finally:
sys.modules.pop('package', None)
sys.modules.pop('package.submodule', None)
if exc is not None:
raise exc
finally:
del sys.path[0]
@skip_if_dont_write_bytecode
class FilePermissionTests(unittest.TestCase):

View file

@ -0,0 +1,2 @@
import package.submodule
package.submodule