mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
MDEV-23867: insert... select crash in compute_window_func
There are 2 issues here: Issue #1: memory allocation. An IO_CACHE that uses encryption uses a larger buffer (it needs space for the encrypted data, decrypted data, IO_CACHE_CRYPT struct to describe encryption parameters etc). Issue #2: IO_CACHE::seek_not_done When IO_CACHE objects are cloned, they still share the file descriptor. This means, operation on one IO_CACHE may change the file read position which will confuse other IO_CACHEs using it. The fix of these issues would be: Allocate the buffer to also include the extra size needed for encryption. Perform seek again after one IO_CACHE reads the file.
This commit is contained in:
parent
5a9df1550f
commit
b94e8e4b25
6 changed files with 3946 additions and 7 deletions
|
|
@ -476,18 +476,19 @@ typedef struct st_io_cache /* Used when cacheing files */
|
|||
partial.
|
||||
*/
|
||||
int seek_not_done,error;
|
||||
/* buffer_length is memory size allocated for buffer or write_buffer */
|
||||
/* length of the buffer used for storing un-encrypted data */
|
||||
size_t buffer_length;
|
||||
/* read_length is the same as buffer_length except when we use async io */
|
||||
size_t read_length;
|
||||
myf myflags; /* Flags used to my_read/my_write */
|
||||
/*
|
||||
alloced_buffer is 1 if the buffer was allocated by init_io_cache() and
|
||||
0 if it was supplied by the user.
|
||||
alloced_buffer is set to the size of the buffer allocated for the IO_CACHE.
|
||||
Includes the overhead(storing key to ecnrypt and decrypt) for encryption.
|
||||
Set to 0 if nothing is allocated.
|
||||
Currently READ_NET is the only one that will use a buffer allocated
|
||||
somewhere else
|
||||
*/
|
||||
my_bool alloced_buffer;
|
||||
size_t alloced_buffer;
|
||||
#ifdef HAVE_AIOWAIT
|
||||
/*
|
||||
As inidicated by ifdef, this is for async I/O, which is not currently
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue