aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2011-08-14 17:09:06 +0000
committerArmin Rigo <arigo@tunes.org>2011-08-14 17:09:06 +0000
commitd0bf0df868590017553aa044b85a9e0734312fb6 (patch)
tree84fdc5f395f72086b529b5f47b9e57032090ec64
parentThe GIL-releasing functions must not be reached by an (diff)
downloadpypy-d0bf0df868590017553aa044b85a9e0734312fb6.tar.gz
pypy-d0bf0df868590017553aa044b85a9e0734312fb6.tar.bz2
pypy-d0bf0df868590017553aa044b85a9e0734312fb6.zip
Fixes for the previous checkin.
-rw-r--r--pypy/module/bz2/interp_bz2.py10
-rw-r--r--pypy/module/pyexpat/interp_pyexpat.py2
-rw-r--r--pypy/module/thread/ll_thread.py12
-rw-r--r--pypy/module/thread/os_thread.py2
-rw-r--r--pypy/rlib/_rsocket_rffi.py8
-rw-r--r--pypy/rlib/rdynload.py2
-rw-r--r--pypy/rlib/rmmap.py7
-rw-r--r--pypy/rlib/ropenssl.py12
-rw-r--r--pypy/rlib/rwin32.py9
-rw-r--r--pypy/rlib/rzlib.py6
-rw-r--r--pypy/rpython/module/ll_os.py3
11 files changed, 41 insertions, 32 deletions
diff --git a/pypy/module/bz2/interp_bz2.py b/pypy/module/bz2/interp_bz2.py
index ecb3a78b62..50ad8f1650 100644
--- a/pypy/module/bz2/interp_bz2.py
+++ b/pypy/module/bz2/interp_bz2.py
@@ -123,9 +123,9 @@ else:
def _bzs_total_out(bzs):
return bzs.total_out
-def external(name, args, result):
+def external(name, args, result, **kwds):
return rffi.llexternal(name, args, result, compilation_info=
- CConfig._compilation_info_)
+ CConfig._compilation_info_, **kwds)
# the least but one parameter should be rffi.VOIDP but it's not used
# so I trick the compiler to not complain about constanst pointer passed
@@ -143,11 +143,13 @@ BZ2_bzWrite = external('BZ2_bzWrite', [rffi.INTP, BZFILE, rffi.CCHARP,
rffi.INT], lltype.Void)
BZ2_bzCompressInit = external('BZ2_bzCompressInit', [bz_stream, rffi.INT,
rffi.INT, rffi.INT], rffi.INT)
-BZ2_bzCompressEnd = external('BZ2_bzCompressEnd', [bz_stream], rffi.INT)
+BZ2_bzCompressEnd = external('BZ2_bzCompressEnd', [bz_stream], rffi.INT,
+ threadsafe=False)
BZ2_bzCompress = external('BZ2_bzCompress', [bz_stream, rffi.INT], rffi.INT)
BZ2_bzDecompressInit = external('BZ2_bzDecompressInit', [bz_stream, rffi.INT,
rffi.INT], rffi.INT)
-BZ2_bzDecompressEnd = external('BZ2_bzDecompressEnd', [bz_stream], rffi.INT)
+BZ2_bzDecompressEnd = external('BZ2_bzDecompressEnd', [bz_stream], rffi.INT,
+ threadsafe=False)
BZ2_bzDecompress = external('BZ2_bzDecompress', [bz_stream], rffi.INT)
def _catch_bz2_error(space, bzerror):
diff --git a/pypy/module/pyexpat/interp_pyexpat.py b/pypy/module/pyexpat/interp_pyexpat.py
index 51cc8bdb0c..c854c84abd 100644
--- a/pypy/module/pyexpat/interp_pyexpat.py
+++ b/pypy/module/pyexpat/interp_pyexpat.py
@@ -317,7 +317,7 @@ XML_ParserCreate = expat_external(
XML_ParserCreateNS = expat_external(
'XML_ParserCreateNS', [rffi.CCHARP, rffi.CHAR], XML_Parser)
XML_ParserFree = expat_external(
- 'XML_ParserFree', [XML_Parser], lltype.Void)
+ 'XML_ParserFree', [XML_Parser], lltype.Void, threadsafe=False)
XML_SetUserData = expat_external(
'XML_SetUserData', [XML_Parser, rffi.VOIDP], lltype.Void)
def XML_GetUserData(parser):
diff --git a/pypy/module/thread/ll_thread.py b/pypy/module/thread/ll_thread.py
index 92677bc976..e84d427a75 100644
--- a/pypy/module/thread/ll_thread.py
+++ b/pypy/module/thread/ll_thread.py
@@ -51,9 +51,9 @@ TLOCKP = rffi.COpaquePtr('struct RPyOpaque_ThreadLock',
c_thread_lock_init = llexternal('RPyThreadLockInit', [TLOCKP], rffi.INT,
threadsafe=False) # may add in a global list
-c_thread_lock_dealloc = llexternal('RPyOpaqueDealloc_ThreadLock', [TLOCKP],
- lltype.Void,
- threadsafe=True)
+c_thread_lock_dealloc_NOAUTO = llexternal('RPyOpaqueDealloc_ThreadLock',
+ [TLOCKP], lltype.Void,
+ _nowrapper=True)
c_thread_acquirelock = llexternal('RPyThreadAcquireLock', [TLOCKP, rffi.INT],
rffi.INT,
threadsafe=True) # release the GIL
@@ -158,9 +158,9 @@ def allocate_ll_lock():
return ll_lock
def free_ll_lock(ll_lock):
- c_thread_acquirelock(ll_lock, 0)
- c_thread_releaselock(ll_lock)
- c_thread_lock_dealloc(ll_lock)
+ c_thread_acquirelock_NOAUTO(ll_lock, 0)
+ c_thread_releaselock_NOAUTO(ll_lock)
+ c_thread_lock_dealloc_NOAUTO(ll_lock)
lltype.free(ll_lock, flavor='raw', track_allocation=False)
def acquire_NOAUTO(ll_lock, flag):
diff --git a/pypy/module/thread/os_thread.py b/pypy/module/thread/os_thread.py
index 7bf70e5f67..a76460048f 100644
--- a/pypy/module/thread/os_thread.py
+++ b/pypy/module/thread/os_thread.py
@@ -252,4 +252,6 @@ thread to exit silently unless the exception is caught."""
def interrupt_main(space):
"""Raise a KeyboardInterrupt in the main thread.
A subthread can use this function to interrupt the main thread."""
+ if space.check_signal_action is None: # no signal module!
+ raise OperationError(space.w_KeyboardInterrupt, space.w_None)
space.check_signal_action.set_interrupt()
diff --git a/pypy/rlib/_rsocket_rffi.py b/pypy/rlib/_rsocket_rffi.py
index 6a253c3b5e..df0e6143f2 100644
--- a/pypy/rlib/_rsocket_rffi.py
+++ b/pypy/rlib/_rsocket_rffi.py
@@ -455,9 +455,9 @@ timeval = cConfig.timeval
# eci = ExternalCompilationInfo(includes=includes, libraries=libraries,
# separate_module_sources=sources)
-def external(name, args, result):
+def external(name, args, result, **kwds):
return rffi.llexternal(name, args, result, compilation_info=eci,
- calling_conv=calling_conv)
+ calling_conv=calling_conv, **kwds)
def external_c(name, args, result, **kwargs):
return rffi.llexternal(name, args, result, compilation_info=eci,
@@ -476,9 +476,9 @@ if _POSIX:
socket = external('socket', [rffi.INT, rffi.INT, rffi.INT], socketfd_type)
if WIN32:
- socketclose = external('closesocket', [socketfd_type], rffi.INT)
+ socketclose = external('closesocket', [socketfd_type], rffi.INT, threadsafe=False)
else:
- socketclose = external('close', [socketfd_type], rffi.INT)
+ socketclose = external('close', [socketfd_type], rffi.INT, threadsafe=False)
socketconnect = external('connect', [socketfd_type, sockaddr_ptr, socklen_t], rffi.INT)
diff --git a/pypy/rlib/rdynload.py b/pypy/rlib/rdynload.py
index 01a74a18bd..222bd988f4 100644
--- a/pypy/rlib/rdynload.py
+++ b/pypy/rlib/rdynload.py
@@ -63,7 +63,7 @@ class DLOpenError(Exception):
if not _WIN32:
c_dlopen = external('dlopen', [rffi.CCHARP, rffi.INT], rffi.VOIDP)
- c_dlclose = external('dlclose', [rffi.VOIDP], rffi.INT)
+ c_dlclose = external('dlclose', [rffi.VOIDP], rffi.INT, threadsafe=False)
c_dlerror = external('dlerror', [], rffi.CCHARP)
c_dlsym = external('dlsym', [rffi.VOIDP, rffi.CCHARP], rffi.VOIDP)
diff --git a/pypy/rlib/rmmap.py b/pypy/rlib/rmmap.py
index df2be6e9c6..e96485b062 100644
--- a/pypy/rlib/rmmap.py
+++ b/pypy/rlib/rmmap.py
@@ -118,7 +118,7 @@ if _POSIX:
has_mremap = cConfig['has_mremap']
c_mmap, c_mmap_safe = external('mmap', [PTR, size_t, rffi.INT, rffi.INT,
rffi.INT, off_t], PTR)
- c_munmap, c_munmap_safe = external('munmap', [PTR, size_t], rffi.INT)
+ _, c_munmap_safe = external('munmap', [PTR, size_t], rffi.INT)
c_msync, _ = external('msync', [PTR, size_t, rffi.INT], rffi.INT)
if has_mremap:
c_mremap, _ = external('mremap',
@@ -174,7 +174,8 @@ elif _MS_WINDOWS:
DuplicateHandle = winexternal('DuplicateHandle', [HANDLE, HANDLE, HANDLE, LPHANDLE, DWORD, BOOL, DWORD], BOOL)
CreateFileMapping = winexternal('CreateFileMappingA', [HANDLE, rwin32.LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR], HANDLE)
MapViewOfFile = winexternal('MapViewOfFile', [HANDLE, DWORD, DWORD, DWORD, SIZE_T], LPCSTR)##!!LPVOID)
- UnmapViewOfFile = winexternal('UnmapViewOfFile', [LPCVOID], BOOL)
+ UnmapViewOfFile = winexternal('UnmapViewOfFile', [LPCVOID], BOOL,
+ threadsafe=False)
FlushViewOfFile = winexternal('FlushViewOfFile', [LPCVOID, SIZE_T], BOOL)
SetFilePointer = winexternal('SetFilePointer', [HANDLE, LONG, PLONG, DWORD], DWORD)
SetEndOfFile = winexternal('SetEndOfFile', [HANDLE], BOOL)
@@ -294,7 +295,7 @@ class MMap(object):
os.close(self.fd)
self.fd = -1
if self.size > 0:
- c_munmap(self.getptr(0), self.size)
+ c_munmap_safe(self.getptr(0), self.size)
self.setdata(NODATA, 0)
def __del__(self):
diff --git a/pypy/rlib/ropenssl.py b/pypy/rlib/ropenssl.py
index aea55e3214..573c3dbf48 100644
--- a/pypy/rlib/ropenssl.py
+++ b/pypy/rlib/ropenssl.py
@@ -197,7 +197,7 @@ ssl_external('X509_NAME_get_entry', [X509_NAME, rffi.INT], X509_NAME_ENTRY)
ssl_external('X509_NAME_ENTRY_get_object', [X509_NAME_ENTRY], ASN1_OBJECT)
ssl_external('X509_NAME_ENTRY_get_data', [X509_NAME_ENTRY], ASN1_STRING)
ssl_external('i2d_X509', [X509, rffi.CCHARPP], rffi.INT)
-ssl_external('X509_free', [X509], lltype.Void)
+ssl_external('X509_free', [X509], lltype.Void, threadsafe=False)
ssl_external('X509_get_notBefore', [X509], ASN1_TIME, macro=True)
ssl_external('X509_get_notAfter', [X509], ASN1_TIME, macro=True)
ssl_external('X509_get_serialNumber', [X509], ASN1_INTEGER)
@@ -232,9 +232,9 @@ ssl_external('SSL_CIPHER_get_bits', [SSL_CIPHER, rffi.INTP], rffi.INT)
ssl_external('ERR_get_error', [], rffi.INT)
ssl_external('ERR_error_string', [rffi.ULONG, rffi.CCHARP], rffi.CCHARP)
-ssl_external('SSL_free', [SSL], lltype.Void)
-ssl_external('SSL_CTX_free', [SSL_CTX], lltype.Void)
-ssl_external('CRYPTO_free', [rffi.VOIDP], lltype.Void)
+ssl_external('SSL_free', [SSL], lltype.Void, threadsafe=False)
+ssl_external('SSL_CTX_free', [SSL_CTX], lltype.Void, threadsafe=False)
+ssl_external('CRYPTO_free', [rffi.VOIDP], lltype.Void, threadsafe=False)
libssl_OPENSSL_free = libssl_CRYPTO_free
ssl_external('SSL_write', [SSL, rffi.CCHARP, rffi.INT], rffi.INT)
@@ -246,7 +246,7 @@ ssl_external('BIO_s_mem', [], BIO_METHOD)
ssl_external('BIO_s_file', [], BIO_METHOD)
ssl_external('BIO_new', [BIO_METHOD], BIO)
ssl_external('BIO_set_nbio', [BIO, rffi.INT], rffi.INT, macro=True)
-ssl_external('BIO_free', [BIO], rffi.INT)
+ssl_external('BIO_free', [BIO], rffi.INT, threadsafe=False)
ssl_external('BIO_reset', [BIO], rffi.INT, macro=True)
ssl_external('BIO_read_filename', [BIO, rffi.CCHARP], rffi.INT, macro=True)
ssl_external('BIO_gets', [BIO, rffi.CCHARP, rffi.INT], rffi.INT)
@@ -273,7 +273,7 @@ EVP_DigestFinal = external(
EVP_MD_CTX_copy = external(
'EVP_MD_CTX_copy', [EVP_MD_CTX, EVP_MD_CTX], rffi.INT)
EVP_MD_CTX_cleanup = external(
- 'EVP_MD_CTX_cleanup', [EVP_MD_CTX], rffi.INT)
+ 'EVP_MD_CTX_cleanup', [EVP_MD_CTX], rffi.INT, threadsafe=False)
def init_ssl():
libssl_SSL_load_error_strings()
diff --git a/pypy/rlib/rwin32.py b/pypy/rlib/rwin32.py
index ed82e2bdd7..2cdc6f882d 100644
--- a/pypy/rlib/rwin32.py
+++ b/pypy/rlib/rwin32.py
@@ -79,8 +79,9 @@ class CConfig:
for k, v in rffi_platform.configure(CConfig).items():
globals()[k] = v
-def winexternal(name, args, result):
- return rffi.llexternal(name, args, result, compilation_info=eci, calling_conv='win')
+def winexternal(name, args, result, **kwds):
+ return rffi.llexternal(name, args, result, compilation_info=eci,
+ calling_conv='win', **kwds)
if WIN32:
HANDLE = rffi.COpaquePtr(typedef='HANDLE')
@@ -103,10 +104,10 @@ if WIN32:
GetProcAddress = winexternal('GetProcAddress',
[HMODULE, rffi.CCHARP],
rffi.VOIDP)
- FreeLibrary = winexternal('FreeLibrary', [HMODULE], BOOL)
+ FreeLibrary = winexternal('FreeLibrary', [HMODULE], BOOL, threadsafe=False)
LocalFree = winexternal('LocalFree', [HLOCAL], DWORD)
- CloseHandle = winexternal('CloseHandle', [HANDLE], BOOL)
+ CloseHandle = winexternal('CloseHandle', [HANDLE], BOOL, threadsafe=False)
FormatMessage = winexternal(
'FormatMessageA',
diff --git a/pypy/rlib/rzlib.py b/pypy/rlib/rzlib.py
index 51548478d2..1f1283d169 100644
--- a/pypy/rlib/rzlib.py
+++ b/pypy/rlib/rzlib.py
@@ -131,7 +131,8 @@ _deflateInit2_ = zlib_external(
rffi.INT)
_deflate = zlib_external('deflate', [z_stream_p, rffi.INT], rffi.INT)
-_deflateEnd = zlib_external('deflateEnd', [z_stream_p], rffi.INT)
+_deflateEnd = zlib_external('deflateEnd', [z_stream_p], rffi.INT,
+ threadsafe=False)
def _deflateInit2(stream, level, method, wbits, memlevel, strategy):
size = rffi.sizeof(z_stream)
@@ -149,7 +150,8 @@ _inflateInit2_ = zlib_external(
rffi.INT)
_inflate = zlib_external('inflate', [z_stream_p, rffi.INT], rffi.INT)
-_inflateEnd = zlib_external('inflateEnd', [z_stream_p], rffi.INT)
+_inflateEnd = zlib_external('inflateEnd', [z_stream_p], rffi.INT,
+ threadsafe=False)
def _inflateInit2(stream, wbits):
size = rffi.sizeof(z_stream)
diff --git a/pypy/rpython/module/ll_os.py b/pypy/rpython/module/ll_os.py
index 4b4b6bbdc6..d990dce6b3 100644
--- a/pypy/rpython/module/ll_os.py
+++ b/pypy/rpython/module/ll_os.py
@@ -877,7 +877,8 @@ class RegisterOs(BaseLazyRegistering):
@registering(os.close)
def register_os_close(self):
- os_close = self.llexternal(underscore_on_windows+'close', [rffi.INT], rffi.INT)
+ os_close = self.llexternal(underscore_on_windows+'close', [rffi.INT],
+ rffi.INT, threadsafe=False)
def close_llimpl(fd):
error = rffi.cast(lltype.Signed, os_close(rffi.cast(rffi.INT, fd)))