Commit cdd07a17 authored by msvensson@pilot.blaudden's avatar msvensson@pilot.blaudden

Merge bk-internal:/home/bk/mysql-5.1-new-maint

into  pilot.blaudden:/home/msvensson/mysql/mysql-5.1-maint
parents c29f404e 5d820841
...@@ -770,19 +770,34 @@ int Log_event::read_log_event(IO_CACHE* file, String* packet, ...@@ -770,19 +770,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; */
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment