~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mysys/mf_iocache2.c

  • Committer: Brian Aker
  • Date: 2008-07-18 20:10:26 UTC
  • mfrom: (51.3.29 remove-dbug)
  • Revision ID: brian@tangent.org-20080718201026-tto5golt0xhwqe4a
Merging in Jay's final patch on dbug.

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
my_b_copy_to_file(IO_CACHE *cache, FILE *file)
52
52
{
53
53
  size_t bytes_in_cache;
54
 
  DBUG_ENTER("my_b_copy_to_file");
55
54
 
56
55
  /* Reinit the cache to read from the beginning of the cache */
57
56
  if (reinit_io_cache(cache, READ_CACHE, 0L, false, false))
58
 
    DBUG_RETURN(1);
 
57
    return(1);
59
58
  bytes_in_cache= my_b_bytes_in_cache(cache);
60
59
  do
61
60
  {
62
61
    if (my_fwrite(file, cache->read_pos, bytes_in_cache,
63
62
                  MYF(MY_WME | MY_NABP)) == (size_t) -1)
64
 
      DBUG_RETURN(1);
 
63
      return(1);
65
64
    cache->read_pos= cache->read_end;
66
65
  } while ((bytes_in_cache= my_b_fill(cache)));
67
 
  DBUG_RETURN(0);
 
66
  return(0);
68
67
}
69
68
 
70
69
 
74
73
    Prevent optimizer from putting res in a register when debugging
75
74
    we need this to be able to see the value of res when the assert fails
76
75
  */
77
 
  dbug_volatile my_off_t res; 
 
76
  volatile my_off_t res; 
78
77
 
79
78
  /*
80
79
    We need to lock the append buffer mutex to keep flush_io_cache()
82
81
    answer to the question.
83
82
  */
84
83
  pthread_mutex_lock(&info->append_buffer_lock);
85
 
#ifndef DBUG_OFF
86
 
  /*
87
 
    Make sure EOF is where we think it is. Note that we cannot just use
88
 
    my_tell() because we have a reader thread that could have left the
89
 
    file offset in a non-EOF location
90
 
  */
91
 
  {
92
 
    volatile my_off_t save_pos;
93
 
    save_pos = my_tell(info->file,MYF(0));
94
 
    my_seek(info->file,(my_off_t)0,MY_SEEK_END,MYF(0));
95
 
    /*
96
 
      Save the value of my_tell in res so we can see it when studying coredump
97
 
    */
98
 
    DBUG_ASSERT(info->end_of_file - (info->append_read_pos-info->write_buffer)
99
 
                == (res=my_tell(info->file,MYF(0))));
100
 
    my_seek(info->file,save_pos,MY_SEEK_SET,MYF(0));
101
 
  }
102
 
#endif  
103
84
  res = info->end_of_file + (info->write_pos-info->append_read_pos);
104
85
  pthread_mutex_unlock(&info->append_buffer_lock);
105
86
  return res;
120
101
void my_b_seek(IO_CACHE *info,my_off_t pos)
121
102
{
122
103
  my_off_t offset;
123
 
  DBUG_ENTER("my_b_seek");
124
 
  DBUG_PRINT("enter",("pos: %lu", (ulong) pos));
125
104
 
126
105
  /*
127
106
    TODO:
142
121
    {
143
122
      /* The read is in the current buffer; Reuse it */
144
123
      info->read_pos = info->buffer + offset;
145
 
      DBUG_VOID_RETURN;
 
124
      return;
146
125
    }
147
126
    else
148
127
    {
157
136
        (uint64_t) (info->write_end - info->write_buffer))
158
137
    {
159
138
      info->write_pos = info->write_buffer + offset;
160
 
      DBUG_VOID_RETURN;
 
139
      return;
161
140
    }
162
141
    VOID(flush_io_cache(info));
163
142
    /* Correct buffer end so that we write in increments of IO_SIZE */
166
145
  }
167
146
  info->pos_in_file=pos;
168
147
  info->seek_not_done=1;
169
 
  DBUG_VOID_RETURN;
 
148
  return;
170
149
}
171
150
 
172
151
 
330
309
      By this point, *fmt must be a percent;  Keep track of this location and
331
310
      skip over the percent character. 
332
311
    */
333
 
    DBUG_ASSERT(*fmt == '%');
 
312
    assert(*fmt == '%');
334
313
    backtrack= fmt;
335
314
    fmt++;
336
315