mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
ha_innodb.h, ha_innodb.cc, handler.h, handler.cc, sql_class.cc:
Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/sql_class.cc: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/handler.cc: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/handler.h: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/ha_innodb.cc: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/ha_innodb.h: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time
This commit is contained in:
@@ -238,8 +238,10 @@ int ha_autocommit_or_rollback(THD *thd, int error)
|
||||
handler must be the same as in the binlog.
|
||||
|
||||
arguments:
|
||||
thd: the thread handle of the current connection
|
||||
log_file_name: latest binlog file name
|
||||
end_offset: the offset in the binlog file up to which we wrote
|
||||
return value: 0 if success, 1 if error
|
||||
*/
|
||||
|
||||
int ha_report_binlog_offset_and_commit(THD *thd,
|
||||
@@ -266,6 +268,34 @@ int ha_report_binlog_offset_and_commit(THD *thd,
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
This function should be called when MySQL sends rows of a SELECT result set
|
||||
or the EOF mark to the client. It releases a possible adaptive hash index
|
||||
S-latch held by thd in InnoDB and also releases a possible InnoDB query
|
||||
FIFO ticket to enter InnoDB. To save CPU time, InnoDB allows a thd to
|
||||
keep them over several calls of the InnoDB handler interface when a join
|
||||
is executed. But when we let the control to pass to the client they have
|
||||
to be released because if the application program uses mysql_use_result(),
|
||||
it may deadlock on the S-latch if the application on another connection
|
||||
performs another SQL query. In MySQL-4.1 this is even more important because
|
||||
there a connection can have several SELECT queries open at the same time.
|
||||
|
||||
arguments:
|
||||
thd: the thread handle of the current connection
|
||||
return value: always 0
|
||||
*/
|
||||
|
||||
int ha_release_temporary_latches(THD *thd)
|
||||
{
|
||||
#ifdef HAVE_INNOBASE_DB
|
||||
THD_TRANS *trans;
|
||||
trans = &thd->transaction.all;
|
||||
if (trans->innobase_tid)
|
||||
innobase_release_temporary_latches(trans->innobase_tid);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ha_commit_trans(THD *thd, THD_TRANS* trans)
|
||||
{
|
||||
int error=0;
|
||||
|
Reference in New Issue
Block a user