mirror of
https://github.com/python/cpython.git
synced 2025-11-25 12:44:13 +00:00
Issue #16113: integrade SHA-3 (Keccak) patch from http://hg.python.org/sandbox/cheimes
This commit is contained in:
parent
8c6db45d3e
commit
4a0270d82b
30 changed files with 7971 additions and 28 deletions
|
|
@ -26,3 +26,36 @@
|
|||
return NULL; \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
/*
|
||||
* Helper code to synchronize access to the hash object when the GIL is
|
||||
* released around a CPU consuming hashlib operation. All code paths that
|
||||
* access a mutable part of obj must be enclosed in a ENTER_HASHLIB /
|
||||
* LEAVE_HASHLIB block or explicitly acquire and release the lock inside
|
||||
* a PY_BEGIN / END_ALLOW_THREADS block if they wish to release the GIL for
|
||||
* an operation.
|
||||
*/
|
||||
|
||||
#ifdef WITH_THREAD
|
||||
#include "pythread.h"
|
||||
#define ENTER_HASHLIB(obj) \
|
||||
if ((obj)->lock) { \
|
||||
if (!PyThread_acquire_lock((obj)->lock, 0)) { \
|
||||
Py_BEGIN_ALLOW_THREADS \
|
||||
PyThread_acquire_lock((obj)->lock, 1); \
|
||||
Py_END_ALLOW_THREADS \
|
||||
} \
|
||||
}
|
||||
#define LEAVE_HASHLIB(obj) \
|
||||
if ((obj)->lock) { \
|
||||
PyThread_release_lock((obj)->lock); \
|
||||
}
|
||||
#else
|
||||
#define ENTER_HASHLIB(obj)
|
||||
#define LEAVE_HASHLIB(obj)
|
||||
#endif
|
||||
|
||||
/* TODO(gps): We should probably make this a module or EVPobject attribute
|
||||
* to allow the user to optimize based on the platform they're using. */
|
||||
#define HASHLIB_GIL_MINSIZE 2048
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue