mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#51851: Server with SBR locks mutex twice on
LOAD DATA into partitioned MyISAM table Problem was that both partitioning and myisam used the same table_share->mutex for different protections (auto inc and repair). Solved by adding a specific mutex for the partitioning auto_increment. Also adding destroying the ha_data structure in free_table_share (which is to be propagated into 5.5). This is a 5.1 ONLY patch, already fixed in 5.5+.
This commit is contained in:
@ -44,6 +44,7 @@ typedef struct st_partition_share
|
||||
typedef struct st_ha_data_partition
|
||||
{
|
||||
ulonglong next_auto_inc_val; /**< first non reserved value */
|
||||
pthread_mutex_t LOCK_auto_inc;
|
||||
bool auto_inc_initialized;
|
||||
} HA_DATA_PARTITION;
|
||||
|
||||
@ -944,8 +945,9 @@ private:
|
||||
DBUG_ASSERT(table_share->ha_data && !auto_increment_lock);
|
||||
if(table_share->tmp_table == NO_TMP_TABLE)
|
||||
{
|
||||
HA_DATA_PARTITION *ha_data= (HA_DATA_PARTITION*) table_share->ha_data;
|
||||
auto_increment_lock= TRUE;
|
||||
pthread_mutex_lock(&table_share->mutex);
|
||||
pthread_mutex_lock(&ha_data->LOCK_auto_inc);
|
||||
}
|
||||
}
|
||||
virtual void unlock_auto_increment()
|
||||
@ -958,7 +960,8 @@ private:
|
||||
*/
|
||||
if(auto_increment_lock && !auto_increment_safe_stmt_log_lock)
|
||||
{
|
||||
pthread_mutex_unlock(&table_share->mutex);
|
||||
HA_DATA_PARTITION *ha_data= (HA_DATA_PARTITION*) table_share->ha_data;
|
||||
pthread_mutex_unlock(&ha_data->LOCK_auto_inc);
|
||||
auto_increment_lock= FALSE;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user