mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
Merge pilot.blaudden:/home/msvensson/mysql/bug26837/my50-bug26837
into pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
This commit is contained in:
commit
0e2de06a2a
1 changed files with 21 additions and 6 deletions
|
@ -669,19 +669,34 @@ int Log_event::read_log_event(IO_CACHE* file, String* packet,
|
||||||
LOG_READ_TOO_LARGE);
|
LOG_READ_TOO_LARGE);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
packet->append(buf, sizeof(buf));
|
|
||||||
|
/* Append the log event header to packet */
|
||||||
|
if (packet->append(buf, sizeof(buf)))
|
||||||
|
{
|
||||||
|
/* Failed to allocate packet */
|
||||||
|
result= LOG_READ_MEM;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
data_len-= LOG_EVENT_MINIMAL_HEADER_LEN;
|
data_len-= LOG_EVENT_MINIMAL_HEADER_LEN;
|
||||||
if (data_len)
|
if (data_len)
|
||||||
{
|
{
|
||||||
|
/* Append rest of event, read directly from file into packet */
|
||||||
if (packet->append(file, data_len))
|
if (packet->append(file, data_len))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Here if we hit EOF it's really an error: as data_len is >=0
|
Fatal error occured when appending rest of the event
|
||||||
there's supposed to be more bytes available.
|
to packet, possible failures:
|
||||||
EOF means we are reading the event partially, which should
|
1. EOF occured when reading from file, it's really an error
|
||||||
never happen: either we read badly or the binlog is truncated.
|
as data_len is >=0 there's supposed to be more bytes available.
|
||||||
|
file->error will have been set to number of bytes left to read
|
||||||
|
2. Read was interrupted, file->error would normally be set to -1
|
||||||
|
3. Failed to allocate memory for packet, my_errno
|
||||||
|
will be ENOMEM(file->error shuold be 0, but since the
|
||||||
|
memory allocation occurs before the call to read it might
|
||||||
|
be uninitialized)
|
||||||
*/
|
*/
|
||||||
result= file->error >= 0 ? LOG_READ_TRUNC: LOG_READ_IO;
|
result= (my_errno == ENOMEM ? LOG_READ_MEM :
|
||||||
|
(file->error >= 0 ? LOG_READ_TRUNC: LOG_READ_IO));
|
||||||
/* Implicit goto end; */
|
/* Implicit goto end; */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue