mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 11:31:51 +01:00
Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into mysql.com:/usr/home/bar/mysql-5.1-new
This commit is contained in:
commit
3c2e84f7f3
5 changed files with 79 additions and 21 deletions
|
@ -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
|
||||
|
|
|
@ -230,6 +230,8 @@ our $opt_client_ddd;
|
|||
our $opt_manual_gdb;
|
||||
our $opt_manual_ddd;
|
||||
our $opt_manual_debug;
|
||||
our $opt_debugger;
|
||||
our $opt_client_debugger;
|
||||
|
||||
our $opt_gprof;
|
||||
our $opt_gprof_dir;
|
||||
|
@ -633,6 +635,8 @@ sub command_line_setup () {
|
|||
'manual-debug' => \$opt_manual_debug,
|
||||
'ddd' => \$opt_ddd,
|
||||
'client-ddd' => \$opt_client_ddd,
|
||||
'debugger=s' => \$opt_debugger,
|
||||
'client-debugger=s' => \$opt_client_debugger,
|
||||
'strace-client' => \$opt_strace_client,
|
||||
'master-binary=s' => \$exe_master_mysqld,
|
||||
'slave-binary=s' => \$exe_slave_mysqld,
|
||||
|
@ -812,9 +816,10 @@ sub command_line_setup () {
|
|||
|
||||
# Check debug related options
|
||||
if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd ||
|
||||
$opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug)
|
||||
$opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug ||
|
||||
$opt_debugger || $opt_client_debugger )
|
||||
{
|
||||
# Indicate that we are using debugger
|
||||
# Indicate that we are using debugger
|
||||
$glob_debugger= 1;
|
||||
# Increase timeouts
|
||||
$opt_wait_timeout= 300;
|
||||
|
@ -2798,6 +2803,10 @@ sub mysqld_start ($$$$$) {
|
|||
{
|
||||
ddd_arguments(\$args, \$exe, "$type"."_$idx");
|
||||
}
|
||||
elsif ( $opt_debugger )
|
||||
{
|
||||
debugger_arguments(\$args, \$exe, "$type"."_$idx");
|
||||
}
|
||||
elsif ( $opt_manual_debug )
|
||||
{
|
||||
print "\nStart $type in your debugger\n" .
|
||||
|
@ -3324,6 +3333,10 @@ sub run_mysqltest ($) {
|
|||
{
|
||||
ddd_arguments(\$args, \$exe, "client");
|
||||
}
|
||||
elsif ( $opt_client_debugger )
|
||||
{
|
||||
debugger_arguments(\$args, \$exe, "client");
|
||||
}
|
||||
|
||||
if ($glob_use_libtool and $opt_valgrind)
|
||||
{
|
||||
|
@ -3476,6 +3489,42 @@ sub ddd_arguments {
|
|||
mtr_add_arg($$args, "$save_exe");
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Modify the exe and args so that program is run in the selected debugger
|
||||
#
|
||||
sub debugger_arguments {
|
||||
my $args= shift;
|
||||
my $exe= shift;
|
||||
my $debugger= $opt_debugger || $opt_client_debugger;
|
||||
|
||||
if ( $debugger eq "vcexpress" or $debugger eq "vc")
|
||||
{
|
||||
# vc[express] /debugexe exe arg1 .. argn
|
||||
|
||||
# Add /debugexe and name of the exe before args
|
||||
unshift(@$$args, "/debugexe");
|
||||
unshift(@$$args, "$$exe");
|
||||
|
||||
}
|
||||
elsif ( $debugger eq "windbg" )
|
||||
{
|
||||
# windbg exe arg1 .. argn
|
||||
|
||||
# Add name of the exe before args
|
||||
unshift(@$$args, "$$exe");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
mtr_error("Unknown argument \"$debugger\" passed to --debugger");
|
||||
}
|
||||
|
||||
# Set exe to debuggername
|
||||
$$exe= $debugger;
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Modify the exe and args so that program is run in valgrind
|
||||
#
|
||||
|
@ -3588,6 +3637,8 @@ Options for debugging the product
|
|||
client-gdb Start mysqltest client in gdb
|
||||
ddd Start mysqld in ddd
|
||||
client-ddd Start mysqltest client in ddd
|
||||
debugger=NAME Start mysqld in the selected debugger
|
||||
client-debugger=NAME Start mysqltest in the selected debugger
|
||||
strace-client FIXME
|
||||
master-binary=PATH Specify the master "mysqld" to use
|
||||
slave-binary=PATH Specify the slave "mysqld" to use
|
||||
|
|
|
@ -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);
|
||||
|
||||
/*
|
||||
|
|
|
@ -49,7 +49,6 @@ TODO:
|
|||
#include "mysql_priv.h"
|
||||
|
||||
#include "ha_tina.h"
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <mysql/plugin.h>
|
||||
|
||||
|
@ -161,7 +160,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
|
||||
|
@ -499,7 +498,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;
|
||||
}
|
||||
|
||||
|
@ -877,7 +876,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);
|
||||
|
||||
/*
|
||||
|
@ -929,7 +929,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 */
|
||||
|
@ -1130,7 +1131,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
|
||||
|
@ -1154,15 +1155,16 @@ int ha_tina::rnd_end()
|
|||
length= length - (size_t)(ptr->end - ptr->begin);
|
||||
}
|
||||
|
||||
/* Truncate the file to the new size */
|
||||
/* 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;
|
||||
|
||||
/* Set the file to the new size */
|
||||
if (my_chsize(share->data_file, length, 0, MYF(MY_WME)))
|
||||
DBUG_RETURN(-1);
|
||||
|
||||
if (my_munmap(share->mapped_file, length))
|
||||
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);
|
||||
}
|
||||
|
@ -1281,6 +1283,13 @@ int ha_tina::delete_all_rows()
|
|||
if (!records_is_known)
|
||||
DBUG_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 */
|
||||
rc= my_chsize(share->data_file, 0, 0, MYF(MY_WME));
|
||||
|
||||
if (get_mmap(share, 0) > 0)
|
||||
|
|
|
@ -51,9 +51,9 @@ typedef struct st_tina_share {
|
|||
ha_rows rows_recorded; /* Number of rows in tables */
|
||||
} TINA_SHARE;
|
||||
|
||||
typedef struct tina_set {
|
||||
off_t begin;
|
||||
off_t end;
|
||||
struct tina_set {
|
||||
off_t begin;
|
||||
off_t end;
|
||||
};
|
||||
|
||||
class ha_tina: public handler
|
||||
|
|
Loading…
Add table
Reference in a new issue