Commit 3e2cf766 authored by unknown's avatar unknown
Browse files

Merge shellback.(none):/home/msvensson/mysql/mysql-5.1

into  shellback.(none):/home/msvensson/mysql/bug17368/my51-bug17368

parents 90c926d9 89c8b298
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -850,6 +850,7 @@ my_bool my_gethwaddr(uchar *to);
#define PROT_WRITE       2
#define MAP_NORESERVE    0
#define MAP_SHARED       0x0001
#define MAP_PRIVATE      0x0002
#define MAP_NOSYNC       0x0800
#define MAP_FAILED       ((void *)-1)
#define MS_SYNC          0x0000
+1 −4
Original line number Diff line number Diff line
@@ -43,22 +43,19 @@ int my_getpagesize(void)
void *my_mmap(void *addr, size_t len, int prot,
               int flags, int fd, my_off_t offset)
{
  DWORD flProtect=0;
  HANDLE hFileMap;
  LPVOID ptr;
  HANDLE hFile= (HANDLE)_get_osfhandle(fd);
  if (hFile == INVALID_HANDLE_VALUE)
    return MAP_FAILED;

  flProtect|=SEC_COMMIT;

  hFileMap=CreateFileMapping(hFile, &mmap_security_attributes,
                             PAGE_READWRITE, 0, (DWORD) len, NULL);
  if (hFileMap == 0)
    return MAP_FAILED;

  ptr=MapViewOfFile(hFileMap,
                    flags & PROT_WRITE ? FILE_MAP_WRITE : FILE_MAP_READ,
                    prot & PROT_WRITE ? FILE_MAP_WRITE : FILE_MAP_READ,
                    (DWORD)(offset >> 32), (DWORD)offset, len);

  /*
+20 −11
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@
#include "mysql_priv.h"

#include "ha_tina.h"
#include <sys/mman.h>

#include <mysql/plugin.h>

@@ -143,7 +142,7 @@ int get_mmap(TINA_SHARE *share, int write)
      share->mapped_file= (byte *)my_mmap(NULL, share->file_stat.st_size,
                                          PROT_READ, MAP_PRIVATE,
                                          share->data_file, 0);
    if ((share->mapped_file ==(caddr_t)-1))
    if ((share->mapped_file == MAP_FAILED))
    {
      /*
        Bad idea you think? See the problem is that nothing actually checks
@@ -331,7 +330,7 @@ ha_tina::ha_tina(TABLE_SHARE *table_arg)
  records_is_known(0)
{
  /* Set our original buffers from pre-allocated memory */
  buffer.set(byte_buffer, IO_SIZE, system_charset_info);
  buffer.set((char*)byte_buffer, IO_SIZE, system_charset_info);
  chain= chain_buffer;
}

@@ -688,7 +687,8 @@ int ha_tina::write_row(byte * buf)

  size= encode_quote(buf);

  if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP)))
  if (my_write(share->data_file, (byte*)buffer.ptr(), size,
               MYF(MY_WME | MY_NABP)))
    DBUG_RETURN(-1);

  /*
@@ -740,7 +740,8 @@ int ha_tina::update_row(const byte * old_data, byte * new_data)
  if (chain_append())
    DBUG_RETURN(-1);

  if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP)))
  if (my_write(share->data_file, (byte*)buffer.ptr(), size,
               MYF(MY_WME | MY_NABP)))
    DBUG_RETURN(-1);

  /* UPDATE should never happen on the log tables */
@@ -934,7 +935,7 @@ int ha_tina::rnd_end()
  if ((chain_ptr - chain)  > 0)
  {
    tina_set *ptr;
    off_t length;
    size_t length;

    /*
      Setting up writable map, this will contain all of the data after the
@@ -958,15 +959,16 @@ int ha_tina::rnd_end()
      length= length - (size_t)(ptr->end - ptr->begin);
    }

    /* Truncate the file to the new size */
    if (my_chsize(share->data_file, length, 0, MYF(MY_WME)))
    /* Unmap the file before the new size is set */
    if (my_munmap(share->mapped_file, share->file_stat.st_size))
      DBUG_RETURN(-1);
    /* We set it to null so that get_mmap() won't try to unmap it */
    share->mapped_file= NULL;

    if (my_munmap(share->mapped_file, length))
    /* Set the file to the new size */
    if (my_chsize(share->data_file, length, 0, MYF(MY_WME)))
      DBUG_RETURN(-1);

    /* We set it to null so that get_mmap() won't try to unmap it */
    share->mapped_file= NULL;
    if (get_mmap(share, 0) > 0)
      DBUG_RETURN(-1);
  }
@@ -986,6 +988,13 @@ int ha_tina::delete_all_rows()
  if (!records_is_known)
    return (my_errno=HA_ERR_WRONG_COMMAND);

  /* Unmap the file before the new size is set */
  if (share->mapped_file && my_munmap(share->mapped_file,
                                      share->file_stat.st_size))
    DBUG_RETURN(-1);
  share->mapped_file= NULL;

  /* Truncate the file to zero size */
  int rc= my_chsize(share->data_file, 0, 0, MYF(MY_WME));

  if (get_mmap(share, 0) > 0)
+3 −3
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ typedef struct st_tina_share {
  THR_LOCK lock;
} TINA_SHARE;

typedef struct tina_set {
struct tina_set {
  off_t begin;
  off_t end;
};