summaryrefslogtreecommitdiff
path: root/mysys/my_write.c
diff options
context:
space:
mode:
authorRohit Kalhans <rohit.kalhans@oracle.com>2012-05-29 12:11:30 +0530
committerRohit Kalhans <rohit.kalhans@oracle.com>2012-05-29 12:11:30 +0530
commit35d4c18ef46923d4d1102ea290365e5704574792 (patch)
treeb8cc09e4196ef3f0d060ffca61b5cb6e6f4d5907 /mysys/my_write.c
parent0bb636b3315defdcab482b42a4577ef2e2b39527 (diff)
downloadmariadb-git-35d4c18ef46923d4d1102ea290365e5704574792.tar.gz
Bug#11762667: MYSQLBINLOG IGNORES ERRORS WHILE WRITING OUTPUT
Problem: mysqlbinlog exits without any error code in case of file write error. It is because of the fact that the calls to Log_event::print() method does not return a value and the thus any error were being ignored. Resolution: We resolve this problem by checking for the IO_CACHE::error == -1 after every call to Log_event:: print() and terminating the further execution.
Diffstat (limited to 'mysys/my_write.c')
-rw-r--r--mysys/my_write.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/mysys/my_write.c b/mysys/my_write.c
index f261c768dcb..b545ab776b0 100644
--- a/mysys/my_write.c
+++ b/mysys/my_write.c
@@ -38,7 +38,17 @@ size_t my_write(int Filedes, const uchar *Buffer, size_t Count, myf MyFlags)
for (;;)
{
- if ((writenbytes= write(Filedes, Buffer, Count)) == Count)
+ writenbytes= write(Filedes, Buffer, Count);
+ /**
+ To simulate the write error set the errno = error code
+ and the number pf written bytes to -1.
+ */
+ DBUG_EXECUTE_IF ("simulate_file_write_error",
+ {
+ errno= ENOSPC;
+ writenbytes= (size_t) -1;
+ });
+ if (writenbytes == Count)
break;
if (writenbytes != (size_t) -1)
{ /* Safeguard */