Author: Ronan Lamy <[email protected]>
Branch: py3.6
Changeset: r97042:c1cbd6d85ee4
Date: 2019-08-01 16:43 +0100
http://bitbucket.org/pypy/pypy/changeset/c1cbd6d85ee4/
Log: hg merge default
diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py
--- a/pypy/module/cpyext/api.py
+++ b/pypy/module/cpyext/api.py
@@ -1021,6 +1021,12 @@
deadlock_error(pname)
rgil.acquire()
assert cpyext_glob_tid_ptr[0] == 0
+ if gil_auto_workaround:
+ # while we're in workaround-land, detect when a regular PyXxx()
+ # function is invoked at .so load-time, e.g. by a C++ global
+ # variable with an initializer, and in this case make sure we
+ # initialize things.
+ space.fromcache(State).make_sure_cpyext_is_imported()
elif pygilstate_ensure:
if cpyext_glob_tid_ptr[0] == tid:
cpyext_glob_tid_ptr[0] = 0
@@ -1749,8 +1755,8 @@
from rpython.rlib import rdynload
from pypy.module.cpyext.pyobject import get_w_obj_and_decref
- space.getbuiltinmodule("cpyext") # mandatory to init cpyext
state = space.fromcache(State)
+ state.make_sure_cpyext_is_imported()
w_mod = state.find_extension(name, path)
if w_mod is not None:
rdynload.dlclose(dll)
diff --git a/pypy/module/cpyext/state.py b/pypy/module/cpyext/state.py
--- a/pypy/module/cpyext/state.py
+++ b/pypy/module/cpyext/state.py
@@ -45,6 +45,13 @@
# XXX will leak if _PyDateTime_Import already called
self.datetimeAPI = []
+ self.cpyext_is_imported = False
+
+ def make_sure_cpyext_is_imported(self):
+ if not self.cpyext_is_imported:
+ self.space.getbuiltinmodule("cpyext") # mandatory to init cpyext
+ self.cpyext_is_imported = True
+
def set_exception(self, operror):
self.clear_exception()
ec = self.space.getexecutioncontext()
diff --git a/rpython/rlib/rfile.py b/rpython/rlib/rfile.py
--- a/rpython/rlib/rfile.py
+++ b/rpython/rlib/rfile.py
@@ -312,6 +312,10 @@
if not self._ll_file:
raise ValueError("I/O operation on closed file")
+ @property
+ def closed(self):
+ return not self._ll_file
+
def _fread(self, buf, n, stream):
if not self._univ_newline:
return c_fread(buf, 1, n, stream)
diff --git a/rpython/rlib/test/test_rfile.py b/rpython/rlib/test/test_rfile.py
--- a/rpython/rlib/test/test_rfile.py
+++ b/rpython/rlib/test/test_rfile.py
@@ -411,7 +411,10 @@
def f():
with open(fname, "w") as f:
f.write("dupa")
+ assert not f.closed
+
try:
+ assert f.closed
f.write("dupb")
except ValueError:
pass
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit