List:Commits« Previous MessageNext Message »
From:Chad MILLER Date:February 13 2007 10:21pm
Subject:bk commit into 5.1 tree (cmiller:1.2431)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of cmiller. When cmiller 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, 2007-02-13 17:21:50-05:00, cmiller@stripped +2 -0
  Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug25807/my50-bug25807
  into  zippy.cornsilk.net:/home/cmiller/work/mysql/bug25807/my51-bug25807
  MERGE: 1.1810.2372.90

  BitKeeper/etc/collapsed@stripped, 2007-02-13 17:21:35-05:00, cmiller@stripped +2 -2
    auto-union
    MERGE: 1.5.1.20

  mysys/mf_iocache.c@stripped, 2007-02-13 17:21:46-05:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.56.1.9

# 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:	cmiller
# Host:	zippy.cornsilk.net
# Root:	/home/cmiller/work/mysql/bug25807/my51-bug25807/RESYNC

--- 1.66/mysys/mf_iocache.c	2007-02-13 17:21:55 -05:00
+++ 1.67/mysys/mf_iocache.c	2007-02-13 17:21:55 -05:00
@@ -157,6 +157,7 @@ int init_io_cache(IO_CACHE *info, File f
 		  pbool use_async_io, myf cache_myflags)
 {
   uint min_cache;
+  my_off_t pos;
   my_off_t end_of_file= ~(my_off_t) 0;
   DBUG_ENTER("init_io_cache");
   DBUG_PRINT("enter",("cache: 0x%lx  type: %d  pos: %ld",
@@ -169,7 +170,25 @@ int init_io_cache(IO_CACHE *info, File f
   info->arg = 0;
   info->alloced_buffer = 0;
   info->buffer=0;
-  info->seek_not_done= test(file >= 0 && seek_offset != my_tell(file, MYF(0)));
+
+  pos= my_tell(file, MYF(0));
+  if ((pos == (my_off_t) -1) && (my_errno == ESPIPE))
+  {
+    /* 
+      This kind of object doesn't support seek() or tell().  Don't set a flag
+      that will make us again try to seek() later and fail.
+    */
+    info->seek_not_done= 0;
+    /*
+      Additionally, if we're supposed to start somewhere other than the
+      the beginning of whatever this file is, then somebody made a bad
+      assumption.
+    */
+    DBUG_ASSERT(seek_offset == 0);
+  }
+  else
+    info->seek_not_done= test(file >= 0 && seek_offset != pos);
+
   info->disk_writes= 0;
 #ifdef THREAD
   info->share=0;
@@ -454,13 +473,23 @@ int _my_b_read(register IO_CACHE *info, 
   */
   if (info->seek_not_done)
   {
-    if (my_seek(info->file,pos_in_file,MY_SEEK_SET,MYF(0)) 
-        == MY_FILEPOS_ERROR)
+    if ((my_seek(info->file,pos_in_file,MY_SEEK_SET,MYF(0)) 
+        != MY_FILEPOS_ERROR))
+    {
+      /* No error, reset seek_not_done flag. */
+      info->seek_not_done= 0;
+    }
+    else
     {
-        info->error= -1;
-        DBUG_RETURN(1);
+      /*
+        If the seek failed and the error number is ESPIPE, it is because
+        info->file is a pipe or socket or FIFO.  We never should have tried
+        to seek on that.  See Bugs#25807 and #22828 for more info.
+      */
+      DBUG_ASSERT(my_errno != ESPIPE);
+      info->error= -1;
+      DBUG_RETURN(1);
     }
-    info->seek_not_done=0;
   }
 
   diff_length=(uint) (pos_in_file & (IO_SIZE-1));

--- 1.29/BitKeeper/etc/collapsed	2007-02-13 17:21:55 -05:00
+++ 1.30/BitKeeper/etc/collapsed	2007-02-13 17:21:55 -05:00
@@ -42,3 +42,5 @@
 45ba4faf2oqu6eR8fqecR3LfSNcYUg
 45ba5238-NKl80QVXzdGo8hO9M75Xg
 45c0fdfb2mz6NdOIsLenJtf6_ZelTA
+45d1ffcd-r3v8A7uh92hQaMfQM9UPQ
+45d21437Vg_-i4uOWyvzYWHESXDP6A
Thread
bk commit into 5.1 tree (cmiller:1.2431)Chad MILLER13 Feb