mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Bug#25460 - High concurrency MyISAM access causes severe mysqld crash.
Decreased code duplication by calling memory mapping function through mi_extra().
This commit is contained in:
@@ -506,22 +506,6 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
|||||||
share->data_file_type = DYNAMIC_RECORD;
|
share->data_file_type = DYNAMIC_RECORD;
|
||||||
my_afree((gptr) disk_cache);
|
my_afree((gptr) disk_cache);
|
||||||
mi_setup_functions(share);
|
mi_setup_functions(share);
|
||||||
if (open_flags & HA_OPEN_MMAP)
|
|
||||||
{
|
|
||||||
info.s= share;
|
|
||||||
if (mi_dynmap_file(&info, share->state.state.data_file_length))
|
|
||||||
{
|
|
||||||
/* purecov: begin inspected */
|
|
||||||
/* Ignore if mmap fails. Use file I/O instead. */
|
|
||||||
DBUG_PRINT("warning", ("mmap failed: errno: %d", errno));
|
|
||||||
/* purecov: end */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
share->file_read= mi_mmap_pread;
|
|
||||||
share->file_write= mi_mmap_pwrite;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
share->is_log_table= FALSE;
|
share->is_log_table= FALSE;
|
||||||
#ifdef THREAD
|
#ifdef THREAD
|
||||||
thr_lock_init(&share->lock);
|
thr_lock_init(&share->lock);
|
||||||
@@ -552,6 +536,14 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
Memory mapping can only be requested after initializing intern_lock.
|
||||||
|
*/
|
||||||
|
if (open_flags & HA_OPEN_MMAP)
|
||||||
|
{
|
||||||
|
info.s= share;
|
||||||
|
mi_extra(&info, HA_EXTRA_MMAP, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user