summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/my_sys.h1
-rwxr-xr-xmysql-test/mysql-test-run.pl55
-rw-r--r--mysys/my_mmap.c5
-rw-r--r--storage/csv/ha_tina.cc31
-rw-r--r--storage/csv/ha_tina.h6
5 files changed, 78 insertions, 20 deletions
diff --git a/include/my_sys.h b/include/my_sys.h
index 2df8dbc9e89..26bf31ae10d 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -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
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 5fd010ed2fe..c2e2ed8bf98 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -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
diff --git a/mysys/my_mmap.c b/mysys/my_mmap.c
index 21bfddae46c..19d9541a967 100644
--- a/mysys/my_mmap.c
+++ b/mysys/my_mmap.c
@@ -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);
/*
diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc
index 38575d26242..537e5b1bcc4 100644
--- a/storage/csv/ha_tina.cc
+++ b/storage/csv/ha_tina.cc
@@ -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 */
- 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);
}
@@ -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)
diff --git a/storage/csv/ha_tina.h b/storage/csv/ha_tina.h
index a60acc62a1e..d155a614780 100644
--- a/storage/csv/ha_tina.h
+++ b/storage/csv/ha_tina.h
@@ -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