Below is the list of changes that have just been committed into a local
5.1 repository of mats. When mats does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2006-10-02 15:08:40+02:00, mats@romeo.(none) +2 -0
BUG#19459 (BINLOG RBR command does not lock tables correctly causing
crash for, e.g., NDB):
Adding new function my_b_copy_to_file() to copy an IO_CACHE to a file.
include/my_sys.h@stripped, 2006-10-02 15:08:36+02:00, mats@romeo.(none) +1 -0
Adding new function my_b_copy_to_file() to copy an IO_CACHE to a file.
mysys/mf_iocache2.c@stripped, 2006-10-02 15:08:36+02:00, mats@romeo.(none) +47 -0
Adding new function my_b_copy_to_file() to copy an IO_CACHE to a file.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: mats
# Host: romeo.(none)
# Root: /home/bk/b19459-mysql-5.1-new
--- 1.199/include/my_sys.h 2006-10-02 15:08:46 +02:00
+++ 1.200/include/my_sys.h 2006-10-02 15:08:46 +02:00
@@ -517,6 +517,7 @@
(uint) (*(info)->current_pos - (info)->request_pos))
/* tell write offset in the SEQ_APPEND cache */
+int my_b_copy_to_file(IO_CACHE *cache, FILE *file);
my_off_t my_b_append_tell(IO_CACHE* info);
my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */
--- 1.27/mysys/mf_iocache2.c 2006-10-02 15:08:46 +02:00
+++ 1.28/mysys/mf_iocache2.c 2006-10-02 15:08:46 +02:00
@@ -24,6 +24,53 @@
#include <stdarg.h>
#include <m_ctype.h>
+/*
+ Copy contents of an IO_CACHE to a file.
+
+ SYNOPSIS
+ copy_io_cache_to_file()
+ cache IO_CACHE to copy from
+ file File to copy to
+
+ DESCRIPTION
+ Copy the contents of the cache to the file. The cache will be
+ re-inited to a read cache and will read from the beginning of the
+ cache.
+
+ If a failure to write fully occurs, the cache is only copied
+ partially.
+
+ TODO
+ Make this function solid by handling partial reads from the cache
+ in a correct manner: it should be atomic.
+
+ RETURN VALUE
+ 0 All OK
+ 1 An error occured
+*/
+int
+my_b_copy_to_file(IO_CACHE *cache, FILE *file)
+{
+ byte buf[IO_SIZE];
+ DBUG_ENTER("my_b_copy_to_file");
+
+ /* Reinit the cache to read from the beginning of the cache */
+ if (reinit_io_cache(cache, READ_CACHE, 0L, FALSE, FALSE))
+ DBUG_RETURN(1);
+ uint bytes_in_cache= my_b_bytes_in_cache(cache);
+ while (bytes_in_cache > 0) {
+ uint const read_bytes= min(bytes_in_cache, sizeof(buf));
+ DBUG_PRINT("debug", ("Remaining %u bytes - Reading %u bytes",
+ bytes_in_cache, read_bytes));
+ if (my_b_read(cache, buf, read_bytes))
+ DBUG_RETURN(1);
+ if (my_fwrite(file, buf, read_bytes, MYF(MY_WME | MY_NABP)) == (uint) -1)
+ DBUG_RETURN(1);
+ bytes_in_cache -= read_bytes;
+ }
+ DBUG_RETURN(0);
+}
+
my_off_t my_b_append_tell(IO_CACHE* info)
{
/*
| Thread |
|---|
| • bk commit into 5.1 tree (mats:1.2213) BUG#19459 | Mats Kindahl | 2 Oct |