Use braces for all code blocks, even short ones.  Also, simplify the thread management around the DSA generation.
diff --git a/OpenSSL/crypto/pkey.c b/OpenSSL/crypto/pkey.c
index 0c76f34..fc1cce5 100644
--- a/OpenSSL/crypto/pkey.c
+++ b/OpenSSL/crypto/pkey.c
@@ -55,26 +55,27 @@
             Py_BEGIN_ALLOW_THREADS;
             rsa = RSA_generate_key(bits, 0x10001, NULL, NULL);
             Py_END_ALLOW_THREADS;
-            if (rsa == NULL)
+            if (rsa == NULL) {
                 FAIL();
-            if (!EVP_PKEY_assign_RSA(self->pkey, rsa))
+            }
+            if (!EVP_PKEY_assign_RSA(self->pkey, rsa)) {
                 FAIL();
+            }
 	    break;
 
         case crypto_TYPE_DSA:
             Py_BEGIN_ALLOW_THREADS;
             dsa = DSA_generate_parameters(bits, NULL, 0, NULL, NULL, NULL, NULL);
+            Py_END_ALLOW_THREADS;
             if (dsa == NULL) {
-                Py_BLOCK_THREADS;
                 FAIL();
             }
             if (!DSA_generate_key(dsa)) {
-                Py_BLOCK_THREADS;
                 FAIL();
             }
-            Py_END_ALLOW_THREADS;
-            if (!EVP_PKEY_assign_DSA(self->pkey, dsa))
+            if (!EVP_PKEY_assign_DSA(self->pkey, dsa)) {
                 FAIL();
+            }
 	    break;
 
         default: