mirror of
https://github.com/MariaDB/server.git
synced 2026-04-21 15:55:53 +02:00
Merge naruto.:C:/cpp/bug20789/my50-bug20789
into naruto.:C:/cpp/mysql-5.0-maint
This commit is contained in:
commit
044ea86cb1
3 changed files with 30 additions and 1 deletions
|
|
@ -224,6 +224,21 @@ int mi_lock_database(MI_INFO *info, int lock_type)
|
|||
break; /* Impossible */
|
||||
}
|
||||
}
|
||||
#ifdef __WIN__
|
||||
else
|
||||
{
|
||||
/*
|
||||
Check for bad file descriptors if this table is part
|
||||
of a merge union. Failing to capture this may cause
|
||||
a crash on windows if the table is renamed and
|
||||
later on referenced by the merge table.
|
||||
*/
|
||||
if( info->owned_by_merge && (info->s)->kfile < 0 )
|
||||
{
|
||||
error = HA_ERR_NO_SUCH_TABLE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
pthread_mutex_unlock(&share->intern_lock);
|
||||
#if defined(FULL_LOG) || defined(_lint)
|
||||
lock_type|=(int) (flag << 8); /* Set bit to set if real lock */
|
||||
|
|
|
|||
|
|
@ -278,6 +278,9 @@ struct st_myisam_info {
|
|||
my_bool page_changed; /* If info->buff can't be used for rnext */
|
||||
my_bool buff_used; /* If info->buff has to be reread for rnext */
|
||||
my_bool once_flags; /* For MYISAMMRG */
|
||||
#ifdef __WIN__
|
||||
my_bool owned_by_merge; /* This MyISAM table is part of a merge union */
|
||||
#endif
|
||||
#ifdef THREAD
|
||||
THR_LOCK_DATA lock;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -26,8 +26,19 @@ int myrg_lock_database(MYRG_INFO *info, int lock_type)
|
|||
MYRG_TABLE *file;
|
||||
|
||||
error=0;
|
||||
for (file=info->open_tables ; file != info->end_table ; file++)
|
||||
for (file=info->open_tables ; file != info->end_table ; file++)
|
||||
{
|
||||
#ifdef __WIN__
|
||||
/*
|
||||
Make sure this table is marked as owned by a merge table.
|
||||
The semaphore is never released as long as table remains
|
||||
in memory. This should be refactored into a more generic
|
||||
approach (observer pattern)
|
||||
*/
|
||||
(file->table)->owned_by_merge = TRUE;
|
||||
#endif
|
||||
if ((new_error=mi_lock_database(file->table,lock_type)))
|
||||
error=new_error;
|
||||
}
|
||||
return(error);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue