From d43a347db179f4601465debc3bfd3cfbb87d1528 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 19 Aug 2003 17:00:36 +0200 Subject: Use my_b_append instead of my_b_write on a SEQ_READ_APPEND cache, when we write the first 4 bytes of the relay log. Indeed comments in mysys/mf_iocache.c say we must always use my_b_append for such a cache. This *could* avoid a very rare assertion failure which is: 030524 19:32:38 Slave SQL thread initialized, starting replication in log 'FIRST' at position 0, relay log '/ users/gbichot/4.1.1/mysql-test/var/log/slave-relay-bin.000001' position: 4 030524 19:32:38 next log '/users/gbichot/4.1.1/mysql-test/var/log/slave-relay-bin.000002' is currently active mysqld: mf_iocache.c:701: _my_b_seq_read: Assertion `pos_in_file == info->end_of_file' failed. and which seemed to happen always when the SQL thread and/or the I/O thread were at position 4 in a relay log. include/my_sys.h: moving a function from log_event.cc so that it can be widely used mysys/mf_iocache.c: moving a function from log_event.cc so that it can be widely used sql/log.cc: my_b_write should not be used on a SEQ_READ_APPEND cache, one should use my_b_append (otherwise there could be some locking problems). sql/log_event.cc: moved to mysys/mf_iocache.c for wider use. A typo. --- mysys/mf_iocache.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'mysys') diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index 0f35ee048bb..d96d4c0db3c 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -988,6 +988,20 @@ end: } +int my_b_safe_write(IO_CACHE *info, const byte *Buffer, uint Count) +{ + /* + Sasha: We are not writing this with the ? operator to avoid hitting + a possible compiler bug. At least gcc 2.95 cannot deal with + several layers of ternary operators that evaluated comma(,) operator + expressions inside - I do have a test case if somebody wants it + */ + if (info->type == SEQ_READ_APPEND) + return my_b_append(info, Buffer, Count); + return my_b_write(info, Buffer, Count); +} + + /* Write a block to disk where part of the data may be inside the record buffer. As all write calls to the data goes through the cache, -- cgit v1.2.1