@@ -212,33 +212,33 @@ int connection_datetime_init(void)
212
212
void MrdbConnection_process_status_info (void * data , enum enum_mariadb_status_info type , ...)
213
213
{
214
214
va_list ap ;
215
- PyThreadState * _save = NULL ;
216
215
MrdbConnection * self = (MrdbConnection * )data ;
217
216
PyObject * dict = NULL ;
218
217
PyObject * dict_key = NULL , * dict_val = NULL ;
219
- va_start (ap , type );
220
218
219
+ PyGILState_STATE gstate ;
220
+ /* Acquire the GIL */
221
+ gstate = PyGILState_Ensure ();
222
+
223
+ va_start (ap , type );
221
224
if (self -> status_callback ) {
222
225
if (type == STATUS_TYPE )
223
226
{
224
227
unsigned int server_status = va_arg (ap , int );
225
228
226
- MARIADB_UNBLOCK_THREADS (self );
227
229
dict_key = PyUnicode_FromString ("server_status" );
228
230
dict_val = PyLong_FromLong (server_status );
229
231
dict = PyDict_New ();
230
232
PyDict_SetItem (dict , dict_key , dict_val );
231
233
Py_DECREF (dict_key );
232
234
Py_DECREF (dict_val );
233
235
PyObject_CallFunction (self -> status_callback , "OO" , (PyObject * )data , dict );
234
- MARIADB_BLOCK_THREADS (self );
235
236
}
236
237
}
237
238
if (type == SESSION_TRACK_TYPE )
238
239
{
239
240
enum enum_session_state_type track_type = va_arg (ap , enum enum_session_state_type );
240
241
241
- MARIADB_UNBLOCK_THREADS (self );
242
242
243
243
if (self -> status_callback ) {
244
244
switch (track_type ) {
@@ -279,9 +279,9 @@ void MrdbConnection_process_status_info(void *data, enum enum_mariadb_status_inf
279
279
280
280
memcpy (charset , val -> str , val -> length );
281
281
charset [val -> length ]= 0 ;
282
- va_end (ap );
283
282
mariadb_throw_exception (NULL , Mariadb_ProgrammingError , 1 ,
284
283
"Character set '%s' is not supported" , charset );
284
+ goto end ;
285
285
}
286
286
if (self -> status_callback )
287
287
{
@@ -294,9 +294,11 @@ void MrdbConnection_process_status_info(void *data, enum enum_mariadb_status_inf
294
294
PyObject_CallFunction (self -> status_callback , "OO" , (PyObject * )data , dict );
295
295
}
296
296
}
297
- MARIADB_BLOCK_THREADS (self );
298
297
}
298
+ end :
299
299
va_end (ap );
300
+ /* Release the GIL */
301
+ PyGILState_Release (gstate );
300
302
}
301
303
#endif
302
304
@@ -376,8 +378,6 @@ MrdbConnection_Initialize(MrdbConnection *self,
376
378
}
377
379
#endif
378
380
379
- MARIADB_BEGIN_ALLOW_THREADS (self );
380
-
381
381
if (mysql_options (self -> mysql , MYSQL_SET_CHARSET_NAME , mariadb_default_charset ))
382
382
goto end ;
383
383
@@ -474,8 +474,10 @@ MrdbConnection_Initialize(MrdbConnection *self,
474
474
goto end ;
475
475
}
476
476
477
+ Py_BEGIN_ALLOW_THREADS ;
477
478
mysql_real_connect (self -> mysql , host , user , password , schema , port ,
478
479
socket , client_flags );
480
+ Py_END_ALLOW_THREADS ;
479
481
480
482
if (mysql_errno (self -> mysql ))
481
483
{
@@ -489,7 +491,6 @@ MrdbConnection_Initialize(MrdbConnection *self,
489
491
490
492
has_error = 0 ;
491
493
end :
492
- MARIADB_END_ALLOW_THREADS (self );
493
494
494
495
if (has_error )
495
496
{
@@ -567,9 +568,9 @@ void MrdbConnection_finalize(MrdbConnection *self)
567
568
{
568
569
if (self -> mysql )
569
570
{
570
- MARIADB_BEGIN_ALLOW_THREADS ( self )
571
+ Py_BEGIN_ALLOW_THREADS
571
572
mysql_close (self -> mysql );
572
- MARIADB_END_ALLOW_THREADS ( self )
573
+ Py_END_ALLOW_THREADS
573
574
self -> mysql = NULL ;
574
575
}
575
576
}
@@ -586,9 +587,9 @@ MrdbConnection_executecommand(MrdbConnection *self,
586
587
587
588
cmd = PyUnicode_AsUTF8AndSize (command , NULL );
588
589
589
- MARIADB_BEGIN_ALLOW_THREADS ( self ) ;
590
+ Py_BEGIN_ALLOW_THREADS ;
590
591
rc = mysql_send_query (self -> mysql , cmd , (long )strlen (cmd ));
591
- MARIADB_END_ALLOW_THREADS ( self ) ;
592
+ Py_END_ALLOW_THREADS ;
592
593
593
594
if (rc )
594
595
{
@@ -604,9 +605,9 @@ PyObject *MrdbConnection_close(MrdbConnection *self)
604
605
/* Todo: check if all the cursor stuff is deleted (when using prepared
605
606
statements this should be handled in mysql_close) */
606
607
607
- MARIADB_BEGIN_ALLOW_THREADS ( self )
608
+ Py_BEGIN_ALLOW_THREADS
608
609
mysql_close (self -> mysql );
609
- MARIADB_END_ALLOW_THREADS ( self )
610
+ Py_END_ALLOW_THREADS
610
611
self -> mysql = NULL ;
611
612
self -> closed = 1 ;
612
613
Py_RETURN_NONE ;
@@ -628,9 +629,9 @@ PyObject *MrdbConnection_ping(MrdbConnection *self)
628
629
629
630
MARIADB_CHECK_CONNECTION (self , NULL );
630
631
631
- MARIADB_BEGIN_ALLOW_THREADS ( self ) ;
632
+ Py_BEGIN_ALLOW_THREADS ;
632
633
rc = mysql_ping (self -> mysql );
633
- MARIADB_END_ALLOW_THREADS ( self ) ;
634
+ Py_END_ALLOW_THREADS ;
634
635
635
636
if (rc ) {
636
637
mariadb_throw_exception (self -> mysql , Mariadb_InterfaceError , 0 , NULL );
@@ -654,9 +655,9 @@ PyObject *MrdbConnection_change_user(MrdbConnection *self,
654
655
if (!PyArg_ParseTuple (args , "szz" , & user , & password , & database ))
655
656
return NULL ;
656
657
657
- MARIADB_BEGIN_ALLOW_THREADS ( self ) ;
658
+ Py_BEGIN_ALLOW_THREADS ;
658
659
rc = mysql_change_user (self -> mysql , user , password , database );
659
- MARIADB_END_ALLOW_THREADS ( self ) ;
660
+ Py_END_ALLOW_THREADS ;
660
661
661
662
if (rc )
662
663
{
@@ -863,9 +864,9 @@ PyObject *MrdbConnection_reconnect(MrdbConnection *self)
863
864
if (!save_reconnect )
864
865
mysql_optionsv (self -> mysql , MYSQL_OPT_RECONNECT , & reconnect );
865
866
866
- MARIADB_BEGIN_ALLOW_THREADS ( self ) ;
867
+ Py_BEGIN_ALLOW_THREADS ;
867
868
rc = mariadb_reconnect (self -> mysql );
868
- MARIADB_END_ALLOW_THREADS ( self ) ;
869
+ Py_END_ALLOW_THREADS ;
869
870
870
871
if (!save_reconnect )
871
872
mysql_optionsv (self -> mysql , MYSQL_OPT_RECONNECT , & save_reconnect );
@@ -886,9 +887,9 @@ PyObject *MrdbConnection_reset(MrdbConnection *self)
886
887
int rc ;
887
888
MARIADB_CHECK_CONNECTION (self , NULL );
888
889
889
- MARIADB_BEGIN_ALLOW_THREADS ( self ) ;
890
+ Py_BEGIN_ALLOW_THREADS ;
890
891
rc = mysql_reset_connection (self -> mysql );
891
- MARIADB_END_ALLOW_THREADS ( self ) ;
892
+ Py_END_ALLOW_THREADS ;
892
893
893
894
if (rc )
894
895
{
@@ -952,9 +953,9 @@ MrdbConnection_dump_debug_info(MrdbConnection *self)
952
953
int rc ;
953
954
MARIADB_CHECK_CONNECTION (self , NULL );
954
955
955
- MARIADB_BEGIN_ALLOW_THREADS ( self ) ;
956
+ Py_BEGIN_ALLOW_THREADS ;
956
957
rc = mysql_dump_debug_info (self -> mysql );
957
- MARIADB_END_ALLOW_THREADS ( self ) ;
958
+ Py_END_ALLOW_THREADS ;
958
959
959
960
if (rc )
960
961
{
@@ -968,9 +969,9 @@ static PyObject *MrdbConnection_readresponse(MrdbConnection *self)
968
969
{
969
970
int rc ;
970
971
971
- MARIADB_BEGIN_ALLOW_THREADS ( self ) ;
972
+ Py_BEGIN_ALLOW_THREADS ;
972
973
rc = self -> mysql -> methods -> db_read_query_result (self -> mysql );
973
- MARIADB_END_ALLOW_THREADS ( self ) ;
974
+ Py_END_ALLOW_THREADS ;
974
975
975
976
if (rc )
976
977
{
0 commit comments