diff options
author | unknown <Kristofer.Pettersson@naruto.> | 2006-09-19 17:40:09 +0200 |
---|---|---|
committer | unknown <Kristofer.Pettersson@naruto.> | 2006-09-19 17:40:09 +0200 |
commit | 18edc55b83a2b9fb4ac6e36c88f86825c207b55f (patch) | |
tree | bd18651be61661b07a4846ec2c0dba96be7b19c2 /myisammrg | |
parent | 2247a2ab81708fba82ae3839b48d5fc788f96f02 (diff) | |
download | mariadb-git-18edc55b83a2b9fb4ac6e36c88f86825c207b55f.tar.gz |
Bug#20789 Merge Subtable Rename Causes Crash
- When a MyISAM table which belongs to a merge table union and is
renamed the associated file descriptors are closed on windows.
This causes a server crash next time an insert or update is
performed on the merge table.
- This patch prevents the system from crashing on windows by
checking for bad file descriptors every time the MyISAM table
is locked by associated the merge table.
myisam/mi_locking.c:
- Added check for bad file descriptors when table is part of merge union.
- This patch prevents the server from crash on windows.
myisam/myisamdef.h:
Added boolean value to indicate that this myisam table is part of
a merge union.
myisammrg/myrg_locking.c:
Added paramter owned_by_merge=TRUE for mi_lock_database through MYRG_TABLE struct.
Diffstat (limited to 'myisammrg')
-rw-r--r-- | myisammrg/myrg_locking.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/myisammrg/myrg_locking.c b/myisammrg/myrg_locking.c index e5a8d3f3d9d..98e8305b9ce 100644 --- a/myisammrg/myrg_locking.c +++ b/myisammrg/myrg_locking.c @@ -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); } |