From 636fb13146711f9ed7a83e7b59b7d8d8fb2501e7 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 16:33:03 +0900 Subject: [PATCH 1/4] Release GIL during result.discard() --- src/MySQLdb/_mysql.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/MySQLdb/_mysql.c b/src/MySQLdb/_mysql.c index b8a19d26..0d8a40bf 100644 --- a/src/MySQLdb/_mysql.c +++ b/src/MySQLdb/_mysql.c @@ -1495,9 +1495,11 @@ _mysql_ResultObject_discard( check_result_connection(self); MYSQL_ROW row; + PY_BEGIN_ALLOW_THREADS; while (NULL != (row = mysql_fetch_row(self->result))) { // do nothing } + PY_END_ALLOW_THREADS; if (mysql_errno(self->conn)) { return _mysql_Exception(self->conn); } From e4bed45415bbd689779b54edc58ffbce8adc7e46 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 16:41:01 +0900 Subject: [PATCH 2/4] refine GIL usage. --- src/MySQLdb/_mysql.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/MySQLdb/_mysql.c b/src/MySQLdb/_mysql.c index 0d8a40bf..00bf4163 100644 --- a/src/MySQLdb/_mysql.c +++ b/src/MySQLdb/_mysql.c @@ -487,7 +487,6 @@ _mysql_ConnectionObject_Initialize( PyErr_SetNone(PyExc_MemoryError); return -1; } - Py_BEGIN_ALLOW_THREADS ; self->open = 1; if (connect_timeout) { @@ -548,10 +547,10 @@ _mysql_ConnectionObject_Initialize( mysql_options(&(self->connection), MYSQL_DEFAULT_AUTH, auth_plugin); } + Py_BEGIN_ALLOW_THREADS; conn = mysql_real_connect(&(self->connection), host, user, passwd, db, port, unix_socket, client_flag); - - Py_END_ALLOW_THREADS ; + Py_END_ALLOW_THREADS; if (ssl) { int i; @@ -1749,9 +1748,7 @@ _mysql_ConnectionObject_insert_id( { my_ulonglong r; check_connection(self); - Py_BEGIN_ALLOW_THREADS r = mysql_insert_id(&(self->connection)); - Py_END_ALLOW_THREADS return PyLong_FromUnsignedLongLong(r); } @@ -2060,9 +2057,7 @@ _mysql_ConnectionObject_thread_id( { unsigned long pid; check_connection(self); - Py_BEGIN_ALLOW_THREADS pid = mysql_thread_id(&(self->connection)); - Py_END_ALLOW_THREADS return PyLong_FromLong((long)pid); } From 7e29d9d1337037de14240a46ef7d2482b8de8c81 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 17:07:16 +0900 Subject: [PATCH 3/4] Fix error --- src/MySQLdb/_mysql.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MySQLdb/_mysql.c b/src/MySQLdb/_mysql.c index 00bf4163..1251238f 100644 --- a/src/MySQLdb/_mysql.c +++ b/src/MySQLdb/_mysql.c @@ -1494,11 +1494,11 @@ _mysql_ResultObject_discard( check_result_connection(self); MYSQL_ROW row; - PY_BEGIN_ALLOW_THREADS; + Py_BEGIN_ALLOW_THREADS while (NULL != (row = mysql_fetch_row(self->result))) { // do nothing } - PY_END_ALLOW_THREADS; + Py_END_ALLOW_THREADS if (mysql_errno(self->conn)) { return _mysql_Exception(self->conn); } From 350cdea7ed126c6398186eca0dc9c38fdad04f2a Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Thu, 18 May 2023 17:08:48 +0900 Subject: [PATCH 4/4] Remove unneeded semicolons --- src/MySQLdb/_mysql.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/MySQLdb/_mysql.c b/src/MySQLdb/_mysql.c index 1251238f..b030af16 100644 --- a/src/MySQLdb/_mysql.c +++ b/src/MySQLdb/_mysql.c @@ -547,10 +547,10 @@ _mysql_ConnectionObject_Initialize( mysql_options(&(self->connection), MYSQL_DEFAULT_AUTH, auth_plugin); } - Py_BEGIN_ALLOW_THREADS; + Py_BEGIN_ALLOW_THREADS conn = mysql_real_connect(&(self->connection), host, user, passwd, db, port, unix_socket, client_flag); - Py_END_ALLOW_THREADS; + Py_END_ALLOW_THREADS if (ssl) { int i; @@ -1402,9 +1402,9 @@ _mysql__fetch_row( if (!self->use) row = mysql_fetch_row(self->result); else { - Py_BEGIN_ALLOW_THREADS; + Py_BEGIN_ALLOW_THREADS row = mysql_fetch_row(self->result); - Py_END_ALLOW_THREADS; + Py_END_ALLOW_THREADS } if (!row && mysql_errno(&(((_mysql_ConnectionObject *)(self->conn))->connection))) { _mysql_Exception((_mysql_ConnectionObject *)self->conn);