diff -ur M2Crypto/SWIG/_dsa.i M2Crypto-0.20.2/SWIG/_dsa.i --- M2Crypto/SWIG/_dsa.i 2009-10-07 06:25:44.000000000 +0200 +++ M2Crypto-0.20.2/SWIG/_dsa.i 2010-02-10 16:46:18.386538508 +0100 @@ -155,13 +155,14 @@ } %} -%threadallow dsa_read_params; %inline %{ DSA *dsa_read_params(BIO *f, PyObject *pyfunc) { DSA *ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_read_bio_DSAparams(f, NULL, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } @@ -174,27 +175,29 @@ } %} -%threadallow dsa_write_key_bio; %inline %{ int dsa_write_key_bio(DSA* dsa, BIO* f, EVP_CIPHER *cipher, PyObject *pyfunc) { int ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_write_bio_DSAPrivateKey(f, dsa, cipher, NULL, 0, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } %} -%threadallow dsa_write_key_bio_no_cipher; %inline %{ int dsa_write_key_bio_no_cipher(DSA* dsa, BIO* f, PyObject *pyfunc) { int ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_write_bio_DSAPrivateKey(f, dsa, NULL, NULL, 0, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } @@ -207,25 +210,27 @@ } %} -%threadallow dsa_read_key; %inline %{ DSA *dsa_read_key(BIO *f, PyObject *pyfunc) { DSA *ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_read_bio_DSAPrivateKey(f, NULL, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } %} -%threadallow dsa_read_pub_key; %inline %{ DSA *dsa_read_pub_key(BIO *f, PyObject *pyfunc) { DSA *ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_read_bio_DSA_PUBKEY(f, NULL, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } diff -ur M2Crypto/SWIG/_ec.i M2Crypto-0.20.2/SWIG/_ec.i --- M2Crypto/SWIG/_ec.i 2010-02-09 17:21:02.434816299 +0100 +++ M2Crypto-0.20.2/SWIG/_ec.i 2010-02-10 16:47:59.284538639 +0100 @@ -205,39 +205,42 @@ } %} -%threadallow ec_key_read_bio; %inline %{ EC_KEY *ec_key_read_bio(BIO *f, PyObject *pyfunc) { EC_KEY *ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_read_bio_ECPrivateKey(f, NULL, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } %} -%threadallow ec_key_write_bio; %inline %{ int ec_key_write_bio(EC_KEY *key, BIO *f, EVP_CIPHER *cipher, PyObject *pyfunc) { int ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_write_bio_ECPrivateKey(f, key, cipher, NULL, 0, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } %} -%threadallow ec_key_write_bio_no_cipher; %inline %{ int ec_key_write_bio_no_cipher(EC_KEY *key, BIO *f, PyObject *pyfunc) { int ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_write_bio_ECPrivateKey(f, key, NULL, NULL, 0, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } diff -ur M2Crypto/SWIG/_evp.i M2Crypto-0.20.2/SWIG/_evp.i --- M2Crypto/SWIG/_evp.i 2010-02-09 17:21:02.439565411 +0100 +++ M2Crypto-0.20.2/SWIG/_evp.i 2010-02-10 16:53:08.174537783 +0100 @@ -463,39 +463,42 @@ } %} -%threadallow pkey_write_pem_no_cipher; %inline %{ int pkey_write_pem_no_cipher(EVP_PKEY *pkey, BIO *f, PyObject *pyfunc) { int ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_write_bio_PKCS8PrivateKey(f, pkey, NULL, NULL, 0, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } %} -%threadallow pkey_write_pem; %inline %{ int pkey_write_pem(EVP_PKEY *pkey, BIO *f, EVP_CIPHER *cipher, PyObject *pyfunc) { int ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_write_bio_PKCS8PrivateKey(f, pkey, cipher, NULL, 0, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } %} -%threadallow pkey_read_pem; %inline %{ EVP_PKEY *pkey_read_pem(BIO *f, PyObject *pyfunc) { EVP_PKEY *pk; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS pk = PEM_read_bio_PrivateKey(f, NULL, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return pk; } diff -ur M2Crypto/SWIG/_pkcs7.i M2Crypto-0.20.2/SWIG/_pkcs7.i --- M2Crypto/SWIG/_pkcs7.i 2010-02-09 17:21:02.431815471 +0100 +++ M2Crypto-0.20.2/SWIG/_pkcs7.i 2010-02-10 16:55:43.516592774 +0100 @@ -101,10 +101,9 @@ } %} -%threadallow pkcs7_verify1; %inline %{ PyObject *pkcs7_verify1(PKCS7 *pkcs7, STACK_OF(X509) *stack, X509_STORE *store, BIO *data, int flags) { - int outlen; + int res, outlen; char *outbuf; BIO *bio; PyObject *ret; @@ -113,7 +112,10 @@ PyErr_SetString(PyExc_MemoryError, "pkcs7_verify1"); return NULL; } - if (!PKCS7_verify(pkcs7, stack, store, data, bio, flags)) { + Py_BEGIN_ALLOW_THREADS + res = PKCS7_verify(pkcs7, stack, store, data, bio, flags); + Py_END_ALLOW_THREADS + if (!res) { PyErr_SetString(_pkcs7_err, ERR_reason_error_string(ERR_get_error())); BIO_free(bio); return NULL; diff -ur M2Crypto/SWIG/_rsa.i M2Crypto-0.20.2/SWIG/_rsa.i --- M2Crypto/SWIG/_rsa.i 2009-10-07 06:28:50.000000000 +0200 +++ M2Crypto-0.20.2/SWIG/_rsa.i 2010-02-10 16:50:40.029788004 +0100 @@ -48,39 +48,42 @@ } %} -%threadallow rsa_read_key; %inline %{ RSA *rsa_read_key(BIO *f, PyObject *pyfunc) { RSA *rsa; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS rsa = PEM_read_bio_RSAPrivateKey(f, NULL, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return rsa; } %} -%threadallow rsa_write_key; %inline %{ int rsa_write_key(RSA *rsa, BIO *f, EVP_CIPHER *cipher, PyObject *pyfunc) { int ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_write_bio_RSAPrivateKey(f, rsa, cipher, NULL, 0, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; } %} -%threadallow rsa_write_key_no_cipher; %inline %{ int rsa_write_key_no_cipher(RSA *rsa, BIO *f, PyObject *pyfunc) { int ret; Py_INCREF(pyfunc); + Py_BEGIN_ALLOW_THREADS ret = PEM_write_bio_RSAPrivateKey(f, rsa, NULL, NULL, 0, passphrase_callback, (void *)pyfunc); + Py_END_ALLOW_THREADS Py_DECREF(pyfunc); return ret; }