@@ -426,7 +426,9 @@ PyHKEY_Close(winreg_state *st, PyObject *ob_handle)
426
426
if (PyHKEY_Check (st , ob_handle )) {
427
427
((PyHKEYObject * )ob_handle )-> hkey = 0 ;
428
428
}
429
+ Py_BEGIN_ALLOW_THREADS
429
430
rc = key ? RegCloseKey (key ) : ERROR_SUCCESS ;
431
+ Py_END_ALLOW_THREADS
430
432
if (rc != ERROR_SUCCESS )
431
433
PyErr_SetFromWindowsErrWithFunction (rc , "RegCloseKey ");
432
434
return rc == ERROR_SUCCESS ;
@@ -499,14 +501,21 @@ PyWinObject_CloseHKEY(winreg_state *st, PyObject *obHandle)
499
501
}
500
502
#if SIZEOF_LONG >= SIZEOF_HKEY
501
503
else if (PyLong_Check (obHandle )) {
502
- long rc = RegCloseKey ((HKEY )PyLong_AsLong (obHandle ));
504
+ long rc ;
505
+ Py_BEGIN_ALLOW_THREADS
506
+ rc = RegCloseKey ((HKEY )PyLong_AsLong (obHandle ));
507
+ Py_END_ALLOW_THREADS
503
508
ok = (rc == ERROR_SUCCESS );
504
509
if (!ok )
505
510
PyErr_SetFromWindowsErrWithFunction (rc , "RegCloseKey" );
506
511
}
507
512
#else
508
513
else if (PyLong_Check (obHandle )) {
509
- long rc = RegCloseKey ((HKEY )PyLong_AsVoidPtr (obHandle ));
514
+ long rc ;
515
+ HKEY hkey = (HKEY )PyLong_AsVoidPtr (obHandle );
516
+ Py_BEGIN_ALLOW_THREADS
517
+ rc = RegCloseKey (hkey );
518
+ Py_END_ALLOW_THREADS
510
519
ok = (rc == ERROR_SUCCESS );
511
520
if (!ok )
512
521
PyErr_SetFromWindowsErrWithFunction (rc , "RegCloseKey" );
@@ -924,7 +933,9 @@ winreg_CreateKey_impl(PyObject *module, HKEY key, const wchar_t *sub_key)
924
933
(Py_ssize_t )KEY_WRITE ) < 0 ) {
925
934
return NULL ;
926
935
}
936
+ Py_BEGIN_ALLOW_THREADS
927
937
rc = RegCreateKeyW (key , sub_key , & retKey );
938
+ Py_END_ALLOW_THREADS
928
939
if (rc != ERROR_SUCCESS ) {
929
940
PyErr_SetFromWindowsErrWithFunction (rc , "CreateKey" );
930
941
return NULL ;
@@ -973,8 +984,10 @@ winreg_CreateKeyEx_impl(PyObject *module, HKEY key, const wchar_t *sub_key,
973
984
(Py_ssize_t )access ) < 0 ) {
974
985
return NULL ;
975
986
}
987
+ Py_BEGIN_ALLOW_THREADS
976
988
rc = RegCreateKeyExW (key , sub_key , reserved , NULL , 0 ,
977
989
access , NULL , & retKey , NULL );
990
+ Py_END_ALLOW_THREADS
978
991
if (rc != ERROR_SUCCESS ) {
979
992
PyErr_SetFromWindowsErrWithFunction (rc , "CreateKeyEx" );
980
993
return NULL ;
@@ -1187,10 +1200,12 @@ winreg_EnumValue_impl(PyObject *module, HKEY key, int index)
1187
1200
(Py_ssize_t )key , index ) < 0 ) {
1188
1201
return NULL ;
1189
1202
}
1190
- if ((rc = RegQueryInfoKeyW (key , NULL , NULL , NULL , NULL , NULL , NULL ,
1191
- NULL ,
1192
- & retValueSize , & retDataSize , NULL , NULL ))
1193
- != ERROR_SUCCESS )
1203
+
1204
+ Py_BEGIN_ALLOW_THREADS
1205
+ rc = RegQueryInfoKeyW (key , NULL , NULL , NULL , NULL , NULL , NULL , NULL ,
1206
+ & retValueSize , & retDataSize , NULL , NULL );
1207
+ Py_END_ALLOW_THREADS
1208
+ if (rc != ERROR_SUCCESS )
1194
1209
return PyErr_SetFromWindowsErrWithFunction (rc ,
1195
1210
"RegQueryInfoKey ");
1196
1211
++ retValueSize ; /* include null terminators */
@@ -1477,9 +1492,11 @@ winreg_QueryInfoKey_impl(PyObject *module, HKEY key)
1477
1492
if (PySys_Audit ("winreg.QueryInfoKey" , "n" , (Py_ssize_t )key ) < 0 ) {
1478
1493
return NULL ;
1479
1494
}
1480
- if ((rc = RegQueryInfoKeyW (key , NULL , NULL , 0 , & nSubKeys , NULL , NULL ,
1481
- & nValues , NULL , NULL , NULL , & ft ))
1482
- != ERROR_SUCCESS ) {
1495
+ Py_BEGIN_ALLOW_THREADS
1496
+ rc = RegQueryInfoKeyW (key , NULL , NULL , 0 , & nSubKeys , NULL , NULL ,
1497
+ & nValues , NULL , NULL , NULL , & ft );
1498
+ Py_END_ALLOW_THREADS
1499
+ if (rc != ERROR_SUCCESS ) {
1483
1500
return PyErr_SetFromWindowsErrWithFunction (rc , "RegQueryInfoKey" );
1484
1501
}
1485
1502
li .LowPart = ft .dwLowDateTime ;
@@ -1587,7 +1604,9 @@ winreg_QueryValue_impl(PyObject *module, HKEY key, const wchar_t *sub_key)
1587
1604
PyMem_Free (pbuf );
1588
1605
}
1589
1606
if (childKey != key ) {
1607
+ Py_BEGIN_ALLOW_THREADS
1590
1608
RegCloseKey (childKey );
1609
+ Py_END_ALLOW_THREADS
1591
1610
}
1592
1611
return result ;
1593
1612
}
@@ -1625,7 +1644,9 @@ winreg_QueryValueEx_impl(PyObject *module, HKEY key, const wchar_t *name)
1625
1644
(Py_ssize_t )key , NULL , name ) < 0 ) {
1626
1645
return NULL ;
1627
1646
}
1647
+ Py_BEGIN_ALLOW_THREADS
1628
1648
rc = RegQueryValueExW (key , name , NULL , NULL , NULL , & bufSize );
1649
+ Py_END_ALLOW_THREADS
1629
1650
if (rc == ERROR_MORE_DATA )
1630
1651
bufSize = 256 ;
1631
1652
else if (rc != ERROR_SUCCESS )
@@ -1637,8 +1658,10 @@ winreg_QueryValueEx_impl(PyObject *module, HKEY key, const wchar_t *name)
1637
1658
1638
1659
while (1 ) {
1639
1660
retSize = bufSize ;
1661
+ Py_BEGIN_ALLOW_THREADS
1640
1662
rc = RegQueryValueExW (key , name , NULL , & typ ,
1641
1663
(BYTE * )retBuf , & retSize );
1664
+ Py_END_ALLOW_THREADS
1642
1665
if (rc != ERROR_MORE_DATA )
1643
1666
break ;
1644
1667
0 commit comments