mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
fixes for windows
This commit is contained in:
@@ -24,7 +24,7 @@
|
|||||||
#include "timer.hpp"
|
#include "timer.hpp"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN 1
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
@@ -19,8 +19,6 @@
|
|||||||
#ifndef _my_base_h
|
#ifndef _my_base_h
|
||||||
#define _my_base_h
|
#define _my_base_h
|
||||||
|
|
||||||
#ifndef stdin /* Included first in handler */
|
|
||||||
#define CHSIZE_USED
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include <my_dir.h> /* This includes types */
|
#include <my_dir.h> /* This includes types */
|
||||||
#include <my_sys.h>
|
#include <my_sys.h>
|
||||||
@@ -31,7 +29,6 @@
|
|||||||
#define EOVERFLOW 84
|
#define EOVERFLOW 84
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* stdin */
|
|
||||||
#include <my_list.h>
|
#include <my_list.h>
|
||||||
|
|
||||||
/* The following is bits in the flag parameter to ha_open() */
|
/* The following is bits in the flag parameter to ha_open() */
|
||||||
|
@@ -91,21 +91,6 @@ struct timespec {
|
|||||||
long tv_nsec;
|
long tv_nsec;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Compare two timespec structs.
|
|
||||||
|
|
||||||
@retval 1 If TS1 ends after TS2.
|
|
||||||
|
|
||||||
@retval 0 If TS1 is equal to TS2.
|
|
||||||
|
|
||||||
@retval -1 If TS1 ends before TS2.
|
|
||||||
*/
|
|
||||||
#define cmp_timespec(TS1, TS2) \
|
|
||||||
((TS1.tv.i64 > TS2.tv.i64) ? 1 : \
|
|
||||||
((TS1.tv.i64 < TS2.tv.i64) ? -1 : 0))
|
|
||||||
|
|
||||||
|
|
||||||
int win_pthread_mutex_trylock(pthread_mutex_t *mutex);
|
int win_pthread_mutex_trylock(pthread_mutex_t *mutex);
|
||||||
int pthread_create(pthread_t *, const pthread_attr_t *, pthread_handler, void *);
|
int pthread_create(pthread_t *, const pthread_attr_t *, pthread_handler, void *);
|
||||||
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
|
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
|
||||||
|
@@ -122,9 +122,9 @@ int PSIZE= sizeof(struct st_mysql_plugin); \
|
|||||||
struct st_mysql_plugin DECLS[]= {
|
struct st_mysql_plugin DECLS[]= {
|
||||||
|
|
||||||
#define MARIA_DECLARE_PLUGIN__(NAME, VERSION, PSIZE, DECLS) \
|
#define MARIA_DECLARE_PLUGIN__(NAME, VERSION, PSIZE, DECLS) \
|
||||||
int VERSION= MARIA_PLUGIN_INTERFACE_VERSION; \
|
MYSQL_PLUGIN_EXPORT int VERSION= MARIA_PLUGIN_INTERFACE_VERSION; \
|
||||||
int PSIZE= sizeof(struct st_maria_plugin); \
|
MYSQL_PLUGIN_EXPORT int PSIZE= sizeof(struct st_maria_plugin); \
|
||||||
struct st_maria_plugin DECLS[]= {
|
MYSQL_PLUGIN_EXPORT struct st_maria_plugin DECLS[]= {
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \
|
#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \
|
||||||
|
@@ -15,6 +15,10 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
|
|
||||||
|
@@ -56,6 +56,9 @@
|
|||||||
#define LOCAL_HOST "localhost"
|
#define LOCAL_HOST "localhost"
|
||||||
#define LOCAL_HOST_NAMEDPIPE "."
|
#define LOCAL_HOST_NAMEDPIPE "."
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__WIN__) && !defined( _CUSTOMCONFIG_)
|
#if defined(__WIN__) && !defined( _CUSTOMCONFIG_)
|
||||||
#define MYSQL_NAMEDPIPE "MySQL"
|
#define MYSQL_NAMEDPIPE "MySQL"
|
||||||
|
@@ -24,32 +24,16 @@
|
|||||||
asks the user the question, as provided by the server and reports
|
asks the user the question, as provided by the server and reports
|
||||||
the answer back to the server. No encryption is involved,
|
the answer back to the server. No encryption is involved,
|
||||||
the answers are sent in clear text.
|
the answers are sent in clear text.
|
||||||
|
|
||||||
Two examples are provided: two_questions server plugin, that asks
|
|
||||||
the password and an "Are you sure?" question with a reply "yes, of course".
|
|
||||||
It demonstrates the usage of "password" (input is hidden) and "ordinary"
|
|
||||||
(input can be echoed) questions, and how to mark the last question,
|
|
||||||
to avoid an extra roundtrip.
|
|
||||||
|
|
||||||
And three_attempts plugin that gives the user three attempts to enter
|
|
||||||
a correct password. It shows the situation when a number of questions
|
|
||||||
is not known in advance.
|
|
||||||
*/
|
*/
|
||||||
#if defined (WIN32) && !defined (RTLD_DEFAULT)
|
#include <my_global.h>
|
||||||
|
#include <mysql/client_plugin.h>
|
||||||
|
#include <mysql.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#if defined (_WIN32)
|
||||||
# define RTLD_DEFAULT GetModuleHandle(NULL)
|
# define RTLD_DEFAULT GetModuleHandle(NULL)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined (_GNU_SOURCE)
|
|
||||||
# define _GNU_SOURCE /* for RTLD_DEFAULT */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <mysql/client_plugin.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <mysql.h>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This plugin performs a dialog with the user, asking questions and
|
This plugin performs a dialog with the user, asking questions and
|
||||||
reading answers. Depending on the client it may be desirable to do it
|
reading answers. Depending on the client it may be desirable to do it
|
||||||
|
@@ -47,11 +47,7 @@ static int getWaitTime(const struct timespec& start_ts);
|
|||||||
|
|
||||||
static unsigned long long timespec_to_usec(const struct timespec *ts)
|
static unsigned long long timespec_to_usec(const struct timespec *ts)
|
||||||
{
|
{
|
||||||
#ifndef __WIN__
|
|
||||||
return (unsigned long long) ts->tv_sec * TIME_MILLION + ts->tv_nsec / TIME_THOUSAND;
|
return (unsigned long long) ts->tv_sec * TIME_MILLION + ts->tv_nsec / TIME_THOUSAND;
|
||||||
#else
|
|
||||||
return ts->tv.i64 / 10;
|
|
||||||
#endif /* __WIN__ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@@ -678,10 +674,6 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Calcuate the waiting period. */
|
/* Calcuate the waiting period. */
|
||||||
#ifdef __WIN__
|
|
||||||
abstime.tv.i64 = start_ts.tv.i64 + (__int64)wait_timeout_ * TIME_THOUSAND * 10;
|
|
||||||
abstime.max_timeout_msec= (long)wait_timeout_;
|
|
||||||
#else
|
|
||||||
unsigned long long diff_nsecs =
|
unsigned long long diff_nsecs =
|
||||||
start_ts.tv_nsec + (unsigned long long)wait_timeout_ * TIME_MILLION;
|
start_ts.tv_nsec + (unsigned long long)wait_timeout_ * TIME_MILLION;
|
||||||
abstime.tv_sec = start_ts.tv_sec;
|
abstime.tv_sec = start_ts.tv_sec;
|
||||||
@@ -691,7 +683,6 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
|
|||||||
diff_nsecs -= TIME_BILLION;
|
diff_nsecs -= TIME_BILLION;
|
||||||
}
|
}
|
||||||
abstime.tv_nsec = diff_nsecs;
|
abstime.tv_nsec = diff_nsecs;
|
||||||
#endif /* __WIN__ */
|
|
||||||
|
|
||||||
/* In semi-synchronous replication, we wait until the binlog-dump
|
/* In semi-synchronous replication, we wait until the binlog-dump
|
||||||
* thread has received the reply on the relevant binlog segment from the
|
* thread has received the reply on the relevant binlog segment from the
|
||||||
|
@@ -28,7 +28,7 @@ IF(WIN32)
|
|||||||
log_client.cc common.cc handshake.cc)
|
log_client.cc common.cc handshake.cc)
|
||||||
|
|
||||||
MYSQL_ADD_PLUGIN(authentication_windows_client ${PLUGIN_SOURCES} ${HEADERS}
|
MYSQL_ADD_PLUGIN(authentication_windows_client ${PLUGIN_SOURCES} ${HEADERS}
|
||||||
LINK_LIBRARUES Secur32
|
LINK_LIBRARIES Secur32
|
||||||
MODULE_ONLY)
|
MODULE_ONLY)
|
||||||
|
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
@@ -100,6 +100,7 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATIC_PLUGIN_LIBS}
|
|||||||
|
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
SET(MYSQLD_SOURCE main.cc nt_servc.cc nt_servc.h message.rc)
|
SET(MYSQLD_SOURCE main.cc nt_servc.cc nt_servc.h message.rc)
|
||||||
|
TARGET_LINK_LIBRARIES(sql psapi)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL})
|
SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@@ -2753,6 +2753,7 @@ extern "C" char *my_demangle(const char *mangled_name, int *status)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern const char *optimizer_switch_names[];
|
||||||
|
|
||||||
extern "C" sig_handler handle_segfault(int sig)
|
extern "C" sig_handler handle_segfault(int sig)
|
||||||
{
|
{
|
||||||
@@ -2859,7 +2860,6 @@ the thread stack. Please read http://dev.mysql.com/doc/mysql/en/linux.html\n\n",
|
|||||||
fprintf(stderr, "Status: %s\n", kreason);
|
fprintf(stderr, "Status: %s\n", kreason);
|
||||||
fprintf(stderr, "Optimizer switch: ");
|
fprintf(stderr, "Optimizer switch: ");
|
||||||
|
|
||||||
extern const char *optimizer_switch_names[];
|
|
||||||
ulonglong optsw= global_system_variables.optimizer_switch;
|
ulonglong optsw= global_system_variables.optimizer_switch;
|
||||||
for (uint i= 0; optimizer_switch_names[i+1]; i++, optsw >>= 1)
|
for (uint i= 0; optimizer_switch_names[i+1]; i++, optsw >>= 1)
|
||||||
{
|
{
|
||||||
|
@@ -59,7 +59,7 @@
|
|||||||
#define EXTRA_DEBUG_fflush fflush
|
#define EXTRA_DEBUG_fflush fflush
|
||||||
#else
|
#else
|
||||||
static void inline EXTRA_DEBUG_fprintf(...) {}
|
static void inline EXTRA_DEBUG_fprintf(...) {}
|
||||||
static int EXTRA_DEBUG_fflush(...) {}
|
static int inline EXTRA_DEBUG_fflush(...) { return 0; }
|
||||||
#endif
|
#endif
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
#define MYSQL_SERVER_my_error my_error
|
#define MYSQL_SERVER_my_error my_error
|
||||||
|
@@ -3027,8 +3027,19 @@ int ha_federated::delete_all_rows()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The idea with handler::store_lock() is the following:
|
Used to manually truncate the table via a delete of all rows in a table.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int ha_federated::truncate()
|
||||||
|
{
|
||||||
|
return delete_all_rows();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* The idea with handler::store_lock() is the following:
|
||||||
|
|
||||||
The statement decided which locks we should need for the table
|
The statement decided which locks we should need for the table
|
||||||
for updates/deletes/inserts we get WRITE locks, for SELECT... we get
|
for updates/deletes/inserts we get WRITE locks, for SELECT... we get
|
||||||
|
@@ -42,7 +42,7 @@ SET(ARIA_SOURCES ma_init.c ma_open.c ma_extra.c ma_info.c ma_rkey.c
|
|||||||
)
|
)
|
||||||
|
|
||||||
MYSQL_ADD_PLUGIN(aria ${ARIA_SOURCES}
|
MYSQL_ADD_PLUGIN(aria ${ARIA_SOURCES}
|
||||||
STORAGE_ENGINE
|
STORAGE_ENGINE STATIC_ONLY DEFAULT
|
||||||
RECOMPILE_FOR_EMBEDDED)
|
RECOMPILE_FOR_EMBEDDED)
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES(aria myisam)
|
TARGET_LINK_LIBRARIES(aria myisam)
|
||||||
|
@@ -395,7 +395,7 @@ int main(int argc __attribute__((unused)),
|
|||||||
pagecache_file_init(file1, &dummy_callback, &dummy_callback,
|
pagecache_file_init(file1, &dummy_callback, &dummy_callback,
|
||||||
&dummy_fail_callback, &dummy_callback, NULL);
|
&dummy_fail_callback, &dummy_callback, NULL);
|
||||||
DBUG_PRINT("info", ("file1: %d", file1.file));
|
DBUG_PRINT("info", ("file1: %d", file1.file));
|
||||||
if (my_chmod(file1_name, S_IRWXU | S_IRWXG | S_IRWXO, MYF(MY_WME)))
|
if (my_chmod(file1_name, 0777, MYF(MY_WME)))
|
||||||
exit(1);
|
exit(1);
|
||||||
my_pwrite(file1.file, (const uchar *)"test file", 9, 0, MYF(0));
|
my_pwrite(file1.file, (const uchar *)"test file", 9, 0, MYF(0));
|
||||||
|
|
||||||
|
@@ -265,7 +265,7 @@ int main(int argc __attribute__((unused)),
|
|||||||
pagecache_file_init(file1, &dummy_callback, &dummy_callback,
|
pagecache_file_init(file1, &dummy_callback, &dummy_callback,
|
||||||
&dummy_fail_callback, &dummy_callback, NULL);
|
&dummy_fail_callback, &dummy_callback, NULL);
|
||||||
DBUG_PRINT("info", ("file1: %d", file1.file));
|
DBUG_PRINT("info", ("file1: %d", file1.file));
|
||||||
if (my_chmod(file1_name, S_IRWXU | S_IRWXG | S_IRWXO, MYF(MY_WME)))
|
if (my_chmod(file1_name, 0777, MYF(MY_WME)))
|
||||||
exit(1);
|
exit(1);
|
||||||
my_pwrite(file1.file, (const uchar*) "test file", 9, 0, MYF(0));
|
my_pwrite(file1.file, (const uchar*) "test file", 9, 0, MYF(0));
|
||||||
|
|
||||||
|
@@ -261,7 +261,7 @@ int main(int argc __attribute__((unused)),
|
|||||||
pagecache_file_init(file1, &dummy_callback, &dummy_callback,
|
pagecache_file_init(file1, &dummy_callback, &dummy_callback,
|
||||||
&dummy_fail_callback, &dummy_callback, NULL);
|
&dummy_fail_callback, &dummy_callback, NULL);
|
||||||
DBUG_PRINT("info", ("file1: %d", file1.file));
|
DBUG_PRINT("info", ("file1: %d", file1.file));
|
||||||
if (my_chmod(file1_name, S_IRWXU | S_IRWXG | S_IRWXO, MYF(MY_WME)))
|
if (my_chmod(file1_name, 0777, MYF(MY_WME)))
|
||||||
exit(1);
|
exit(1);
|
||||||
my_pwrite(file1.file, (const uchar*) "test file", 9, 0, MYF(0));
|
my_pwrite(file1.file, (const uchar*) "test file", 9, 0, MYF(0));
|
||||||
|
|
||||||
|
@@ -792,7 +792,7 @@ int main(int argc __attribute__((unused)),
|
|||||||
my_delete(file2_name, MYF(0));
|
my_delete(file2_name, MYF(0));
|
||||||
|
|
||||||
DBUG_PRINT("info", ("file1: %d", file1.file));
|
DBUG_PRINT("info", ("file1: %d", file1.file));
|
||||||
if (my_chmod(file1_name, S_IRWXU | S_IRWXG | S_IRWXO, MYF(MY_WME)))
|
if (my_chmod(file1_name, 0777, MYF(MY_WME)))
|
||||||
exit(1);
|
exit(1);
|
||||||
my_pwrite(file1.file, (const uchar*)"test file", 9, 0, MYF(MY_WME));
|
my_pwrite(file1.file, (const uchar*)"test file", 9, 0, MYF(MY_WME));
|
||||||
|
|
||||||
|
@@ -154,7 +154,7 @@ int main(int argc __attribute__((unused)), char *argv[])
|
|||||||
}
|
}
|
||||||
pagecache_file_init(file1, &dummy_callback, &dummy_callback,
|
pagecache_file_init(file1, &dummy_callback, &dummy_callback,
|
||||||
&dummy_fail_callback, maria_flush_log_for_page, NULL);
|
&dummy_fail_callback, maria_flush_log_for_page, NULL);
|
||||||
if (my_chmod(file1_name, S_IRWXU | S_IRWXG | S_IRWXO, MYF(MY_WME)))
|
if (my_chmod(file1_name, 0777, MYF(MY_WME)))
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@@ -15,12 +15,11 @@ IF(BOOST_OK)
|
|||||||
ADD_DEFINITIONS(-DHAVE_OQGRAPH)
|
ADD_DEFINITIONS(-DHAVE_OQGRAPH)
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
||||||
ENDIF(MSVC)
|
ELSE(MSVC)
|
||||||
IF(CMAKE_CXX_FLAGS)
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
|
||||||
STRING(REPLACE "-fno-exceptions" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
STRING(REPLACE "-fno-exceptions" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||||
STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
|
ENDIF(MSVC)
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
MYSQL_ADD_PLUGIN(oqgraph ha_oqgraph.cc graphcore.cc STORAGE_ENGINE
|
MYSQL_ADD_PLUGIN(oqgraph ha_oqgraph.cc graphcore.cc STORAGE_ENGINE
|
||||||
MODULE_ONLY)
|
MODULE_ONLY)
|
||||||
|
@@ -90,6 +90,5 @@ src/xt_config.h
|
|||||||
src/xt_defs.h
|
src/xt_defs.h
|
||||||
src/xt_errno.h)
|
src/xt_errno.h)
|
||||||
|
|
||||||
SET(PBXT_PLUGIN_STATIC "pbxt")
|
MYSQL_ADD_PLUGIN(pbxt ${PBXT_SOURCES} STORAGE_ENGINE STATIC_ONLY)
|
||||||
MYSQL_ADD_PLUGIN(pbxt ${PBXT_SOURCES} STORAGE_ENGINE)
|
|
||||||
|
|
||||||
|
@@ -26,8 +26,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#ifndef XT_WIN
|
#ifndef XT_WIN
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <signal.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
#include <signal.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifndef DRIZZLED
|
#ifndef DRIZZLED
|
||||||
|
@@ -45,22 +45,16 @@ xtPublic void xt_p_init_threading(void)
|
|||||||
|
|
||||||
xtPublic int xt_p_set_normal_priority(pthread_t thr)
|
xtPublic int xt_p_set_normal_priority(pthread_t thr)
|
||||||
{
|
{
|
||||||
if (!SetThreadPriority (thr, THREAD_PRIORITY_NORMAL))
|
|
||||||
return GetLastError();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
xtPublic int xt_p_set_low_priority(pthread_t thr)
|
xtPublic int xt_p_set_low_priority(pthread_t thr)
|
||||||
{
|
{
|
||||||
if (!SetThreadPriority (thr, THREAD_PRIORITY_LOWEST))
|
|
||||||
return GetLastError();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
xtPublic int xt_p_set_high_priority(pthread_t thr)
|
xtPublic int xt_p_set_high_priority(pthread_t thr)
|
||||||
{
|
{
|
||||||
if (!SetThreadPriority (thr, THREAD_PRIORITY_HIGHEST))
|
|
||||||
return GetLastError();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,31 +395,7 @@ xtPublic int xt_p_cond_timedwait(xt_cond_type *cond, xt_mutex_type *mt, struct t
|
|||||||
|
|
||||||
xtPublic int xt_p_join(pthread_t thread, void **value)
|
xtPublic int xt_p_join(pthread_t thread, void **value)
|
||||||
{
|
{
|
||||||
DWORD exitcode;
|
pthread_join(thread, value);
|
||||||
|
|
||||||
while(1) {
|
|
||||||
switch (WaitForSingleObject(thread, 10000)) {
|
|
||||||
case WAIT_OBJECT_0:
|
|
||||||
return 0;
|
|
||||||
case WAIT_TIMEOUT:
|
|
||||||
/* Don't do this! According to the Win docs:
|
|
||||||
* _endthread automatically closes the thread handle
|
|
||||||
* (whereas _endthreadex does not). Therefore, when using
|
|
||||||
* _beginthread and _endthread, do not explicitly close the
|
|
||||||
* thread handle by calling the Win32 CloseHandle API.
|
|
||||||
CloseHandle(thread);
|
|
||||||
*/
|
|
||||||
/* This is done so that if the thread was not [yet] in the running
|
|
||||||
* state when this function was called we won't deadlock here.
|
|
||||||
*/
|
|
||||||
if (GetExitCodeThread(thread, &exitcode) && (exitcode == STILL_ACTIVE))
|
|
||||||
break;
|
|
||||||
return 0;
|
|
||||||
case WAIT_FAILED:
|
|
||||||
return GetLastError();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1513,16 +1513,7 @@ xtPublic pthread_t xt_run_thread(XTThreadPtr self, XTThreadPtr child, void *(*st
|
|||||||
data.td_started = FALSE;
|
data.td_started = FALSE;
|
||||||
data.td_thr = child;
|
data.td_thr = child;
|
||||||
data.td_start_routine = start_routine;
|
data.td_start_routine = start_routine;
|
||||||
#ifdef XT_WIN
|
|
||||||
{
|
|
||||||
pthread_attr_t attr = { 0, 0, 0 };
|
|
||||||
|
|
||||||
attr.priority = THREAD_PRIORITY_NORMAL;
|
|
||||||
err = pthread_create(&child_thread, &attr, xt_thread_main, &data);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
err = pthread_create(&child_thread, NULL, xt_thread_main, &data);
|
err = pthread_create(&child_thread, NULL, xt_thread_main, &data);
|
||||||
#endif
|
|
||||||
if (err) {
|
if (err) {
|
||||||
xt_free_thread(child);
|
xt_free_thread(child);
|
||||||
xt_throw_errno(XT_CONTEXT, err);
|
xt_throw_errno(XT_CONTEXT, err);
|
||||||
|
@@ -26,10 +26,10 @@
|
|||||||
#include "field.h"
|
#include "field.h"
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
#include <mysqld_error.h>
|
#include <mysqld_error.h>
|
||||||
|
#include <my_net.h>
|
||||||
|
|
||||||
#ifndef __WIN__
|
#ifndef __WIN__
|
||||||
// UNIX-specific
|
// UNIX-specific
|
||||||
#include <my_net.h>
|
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
|
|
||||||
@@ -39,8 +39,6 @@
|
|||||||
#else
|
#else
|
||||||
// Windows-specific
|
// Windows-specific
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#define strcasecmp stricmp
|
|
||||||
#define snprintf _snprintf
|
|
||||||
|
|
||||||
#define RECV_FLAGS 0
|
#define RECV_FLAGS 0
|
||||||
|
|
||||||
|
@@ -259,5 +259,5 @@ IF(WITH_INNODB)
|
|||||||
SET(WITH_INNOBASE_STORAGE_ENGINE TRUE)
|
SET(WITH_INNOBASE_STORAGE_ENGINE TRUE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
MYSQL_ADD_PLUGIN(xtradb ${INNOBASE_SOURCES} STORAGE_ENGINE
|
MYSQL_ADD_PLUGIN(xtradb ${INNOBASE_SOURCES} STORAGE_ENGINE DEFAULT
|
||||||
LINK_LIBRARIES ${ZLIB_LIBRARY})
|
LINK_LIBRARIES ${ZLIB_LIBRARY})
|
||||||
|
@@ -29,6 +29,13 @@ Created 9/20/1997 Heikki Tuuri
|
|||||||
#include "log0recv.ic"
|
#include "log0recv.ic"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#ifdef HAVE_ALLOCA_H
|
||||||
|
#include "alloca.h"
|
||||||
|
#else
|
||||||
|
#include "malloc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "mem0mem.h"
|
#include "mem0mem.h"
|
||||||
#include "buf0buf.h"
|
#include "buf0buf.h"
|
||||||
#include "buf0flu.h"
|
#include "buf0flu.h"
|
||||||
|
@@ -37,7 +37,7 @@ Created 10/21/1995 Heikki Tuuri
|
|||||||
#ifdef UNIV_NONINL
|
#ifdef UNIV_NONINL
|
||||||
#include "os0file.ic"
|
#include "os0file.ic"
|
||||||
#endif
|
#endif
|
||||||
|
#include "ha_prototypes.h"
|
||||||
#include "ut0mem.h"
|
#include "ut0mem.h"
|
||||||
#include "srv0srv.h"
|
#include "srv0srv.h"
|
||||||
#include "srv0start.h"
|
#include "srv0start.h"
|
||||||
@@ -1601,7 +1601,7 @@ try_again:
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
*success = TRUE;
|
*success = TRUE;
|
||||||
if (os_aio_use_native_aio && ((attributes & FILE_FLAG_OVERLAPPED) != 0)) {
|
if (srv_use_native_aio && ((attributes & FILE_FLAG_OVERLAPPED) != 0)) {
|
||||||
ut_a(CreateIoCompletionPort(file, completion_port, 0, 0));
|
ut_a(CreateIoCompletionPort(file, completion_port, 0, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4286,18 +4286,6 @@ os_aio_windows_handle(
|
|||||||
ret = GetQueuedCompletionStatus(completion_port, &len, &key,
|
ret = GetQueuedCompletionStatus(completion_port, &len, &key,
|
||||||
(OVERLAPPED **)&slot, INFINITE);
|
(OVERLAPPED **)&slot, INFINITE);
|
||||||
|
|
||||||
if (srv_recovery_stats && recv_recovery_is_on() && n_consecutive) {
|
|
||||||
mutex_enter(&(recv_sys->mutex));
|
|
||||||
if (slot->type == OS_FILE_READ) {
|
|
||||||
recv_sys->stats_read_io_pages += n_consecutive;
|
|
||||||
recv_sys->stats_read_io_consecutive[n_consecutive - 1]++;
|
|
||||||
} else if (slot->type == OS_FILE_WRITE) {
|
|
||||||
recv_sys->stats_write_io_pages += n_consecutive;
|
|
||||||
recv_sys->stats_write_io_consecutive[n_consecutive - 1]++;
|
|
||||||
}
|
|
||||||
mutex_exit(&(recv_sys->mutex));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If shutdown key was received, repost the shutdown message and exit */
|
/* If shutdown key was received, repost the shutdown message and exit */
|
||||||
if (ret && (key == IOCP_SHUTDOWN_KEY)) {
|
if (ret && (key == IOCP_SHUTDOWN_KEY)) {
|
||||||
PostQueuedCompletionStatus(completion_port, 0, key, NULL);
|
PostQueuedCompletionStatus(completion_port, 0, key, NULL);
|
||||||
|
@@ -136,20 +136,6 @@ UNIV_INTERN ulint srv_max_file_format_at_startup = DICT_TF_FORMAT_MAX;
|
|||||||
/** Place locks to records only i.e. do not use next-key locking except
|
/** Place locks to records only i.e. do not use next-key locking except
|
||||||
on duplicate key checking and foreign key checking */
|
on duplicate key checking and foreign key checking */
|
||||||
UNIV_INTERN ibool srv_locks_unsafe_for_binlog = FALSE;
|
UNIV_INTERN ibool srv_locks_unsafe_for_binlog = FALSE;
|
||||||
#ifdef __WIN__
|
|
||||||
/* Windows native condition variables. We use runtime loading / function
|
|
||||||
pointers, because they are not available on Windows Server 2003 and
|
|
||||||
Windows XP/2000.
|
|
||||||
|
|
||||||
We use condition for events on Windows if possible, even if os_event
|
|
||||||
resembles Windows kernel event object well API-wise. The reason is
|
|
||||||
performance, kernel objects are heavyweights and WaitForSingleObject() is a
|
|
||||||
performance killer causing calling thread to context switch. Besides, Innodb
|
|
||||||
is preallocating large number (often millions) of os_events. With kernel event
|
|
||||||
objects it takes a big chunk out of non-paged pool, which is better suited
|
|
||||||
for tasks like IO than for storing idle event objects. */
|
|
||||||
UNIV_INTERN ibool srv_use_native_conditions = FALSE;
|
|
||||||
#endif /* __WIN__ */
|
|
||||||
|
|
||||||
/* If this flag is TRUE, then we will use the native aio of the
|
/* If this flag is TRUE, then we will use the native aio of the
|
||||||
OS (provided we compiled Innobase with it in), otherwise we will
|
OS (provided we compiled Innobase with it in), otherwise we will
|
||||||
|
@@ -1377,7 +1377,7 @@ innobase_start_or_create_for_mysql(void)
|
|||||||
} else if (0 == ut_strcmp(srv_file_flush_method_str,
|
} else if (0 == ut_strcmp(srv_file_flush_method_str,
|
||||||
"async_unbuffered")) {
|
"async_unbuffered")) {
|
||||||
srv_win_file_flush_method = SRV_WIN_IO_UNBUFFERED;
|
srv_win_file_flush_method = SRV_WIN_IO_UNBUFFERED;
|
||||||
os_aio_use_native_aio = TRUE;
|
srv_use_native_aio = TRUE;
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
|
@@ -15,5 +15,3 @@
|
|||||||
|
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
|
||||||
ADD_LIBRARY(mytap tap.c)
|
ADD_LIBRARY(mytap tap.c)
|
||||||
|
|
||||||
MY_ADD_TESTS(t/basic)
|
|
||||||
|
Reference in New Issue
Block a user