Auto-merge from mysql-next-mr.
This commit is contained in:
commit
17fa6edf12
@ -269,11 +269,12 @@ test-full-qa:
|
||||
#
|
||||
|
||||
API_PREPROCESSOR_HEADER = $(top_srcdir)/include/mysql/plugin.h \
|
||||
$(top_srcdir)/include/mysql.h
|
||||
$(top_srcdir)/include/mysql.h \
|
||||
$(top_srcdir)/include/mysql/psi/psi_abi_v1.h \
|
||||
$(top_srcdir)/include/mysql/psi/psi_abi_v2.h
|
||||
|
||||
TEST_PREPROCESSOR_HEADER = $(top_srcdir)/include/mysql/plugin.h \
|
||||
$(top_srcdir)/sql/mysql_priv.h \
|
||||
$(top_srcdir)/include/mysql.h
|
||||
TEST_PREPROCESSOR_HEADER = $(API_PREPROCESSOR_HEADER) \
|
||||
$(top_srcdir)/sql/mysql_priv.h
|
||||
|
||||
#
|
||||
# Rules for checking that the abi/api has not changed.
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2000-2006 MySQL AB
|
||||
# Copyright (C) 2000-2006 MySQL AB, 2009 Sun Microsystems, Inc
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public
|
||||
@ -24,6 +24,8 @@ pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \
|
||||
my_xml.h mysql_embed.h mysql/services.h \
|
||||
mysql/service_my_snprintf.h mysql/service_thd_alloc.h \
|
||||
my_pthread.h my_no_pthread.h \
|
||||
mysql/psi/psi.h mysql/psi/mysql_thread.h \
|
||||
mysql/psi/mysql_file.h \
|
||||
decimal.h errmsg.h my_global.h my_net.h \
|
||||
my_getopt.h sslopt-longopts.h my_dir.h \
|
||||
sslopt-vars.h sslopt-case.h sql_common.h keycache.h \
|
||||
@ -38,13 +40,15 @@ noinst_HEADERS = config-win.h config-netware.h lf.h my_bit.h \
|
||||
my_aes.h my_tree.h my_trie.h hash.h thr_alarm.h \
|
||||
thr_lock.h t_ctype.h violite.h my_md5.h base64.h \
|
||||
my_handler.h my_time.h service_versions.h \
|
||||
my_rdtsc.h \
|
||||
my_rdtsc.h mysql/psi/psi_abi_v1.h mysql/psi/psi_abi_v2.h \
|
||||
my_vle.h my_user.h my_atomic.h atomic/nolock.h \
|
||||
atomic/rwlock.h atomic/x86-gcc.h atomic/generic-msvc.h \
|
||||
atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h \
|
||||
atomic/solaris.h
|
||||
|
||||
EXTRA_DIST = mysql.h.pp mysql/plugin.h.pp probes_mysql.d.base
|
||||
EXTRA_DIST = mysql.h.pp mysql/plugin.h.pp probes_mysql.d.base \
|
||||
mysql/psi/psi_abi_v1.h.pp \
|
||||
mysql/psi/psi_abi_v2.h.pp
|
||||
|
||||
# Remove built files and the symlinked directories
|
||||
CLEANFILES = $(BUILT_SOURCES) readline openssl probes_mysql.d probes_mysql_nodtrace.h
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000-2003 MySQL AB
|
||||
/* Copyright (C) 2000-2003 MySQL AB, 2009 Sun Microsystems, Inc
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -83,6 +83,16 @@
|
||||
#endif
|
||||
#endif /* _WIN32... */
|
||||
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
|
||||
#undef WITH_PERFSCHEMA_STORAGE_ENGINE
|
||||
#endif
|
||||
#endif /* EMBEDDED_LIBRARY */
|
||||
|
||||
#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
|
||||
#define HAVE_PSI_INTERFACE
|
||||
#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
|
||||
|
||||
/* Make it easier to add conditionl code for windows */
|
||||
#ifdef __WIN__
|
||||
#define IF_WIN(A,B) (A)
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef MY_NO_PTHREAD_INCLUDED
|
||||
#define MY_NO_PTHREAD_INCLUDED
|
||||
|
||||
/* Copyright (C) 2000 MySQL AB
|
||||
/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -48,5 +48,16 @@
|
||||
#define rw_unlock(A)
|
||||
#define rwlock_destroy(A)
|
||||
|
||||
#define mysql_mutex_init(A, B, C) do {} while (0)
|
||||
#define mysql_mutex_lock(A) do {} while (0)
|
||||
#define mysql_mutex_unlock(A) do {} while (0)
|
||||
#define mysql_mutex_destroy(A) do {} while (0)
|
||||
|
||||
#define mysql_rwlock_init(A, B, C) do {} while (0)
|
||||
#define mysql_rwlock_rdlock(A) do {} while (0)
|
||||
#define mysql_rwlock_wrlock(A) do {} while (0)
|
||||
#define mysql_rwlock_unlock(A) do {} while (0)
|
||||
#define mysql_rwlock_destroy(A) do {} while (0)
|
||||
|
||||
#endif
|
||||
#endif /* MY_NO_PTHREAD_INCLUDED */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000 MySQL AB
|
||||
/* Copyright (C) 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -99,7 +99,7 @@ struct timespec {
|
||||
|
||||
|
||||
int win_pthread_mutex_trylock(pthread_mutex_t *mutex);
|
||||
int pthread_create(pthread_t *,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_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
|
||||
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
@ -137,8 +137,8 @@ int pthread_join(pthread_t thread, void **value_ptr);
|
||||
#define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0)
|
||||
#define pthread_mutex_lock(A) (EnterCriticalSection(A),0)
|
||||
#define pthread_mutex_trylock(A) win_pthread_mutex_trylock((A))
|
||||
#define pthread_mutex_unlock(A) LeaveCriticalSection(A)
|
||||
#define pthread_mutex_destroy(A) DeleteCriticalSection(A)
|
||||
#define pthread_mutex_unlock(A) (LeaveCriticalSection(A), 0)
|
||||
#define pthread_mutex_destroy(A) (DeleteCriticalSection(A), 0)
|
||||
#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH)
|
||||
|
||||
|
||||
@ -630,6 +630,10 @@ extern int pthread_dummy(int);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <mysql/psi/mysql_thread.h>
|
||||
|
||||
#define INSTRUMENT_ME 0
|
||||
|
||||
struct st_my_thread_var
|
||||
{
|
||||
int thr_errno;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000-2003 MySQL AB
|
||||
/* Copyright (C) 2000-2003 MySQL AB, 2008-2009 Sun Microsystems, Inc
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -1018,5 +1018,15 @@ void netware_reg_user(const char *ip, const char *user,
|
||||
const char *application);
|
||||
#endif
|
||||
|
||||
#include <mysql/psi/psi.h>
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
extern MYSQL_PLUGIN_IMPORT struct PSI_bootstrap *PSI_hook;
|
||||
void my_init_mysys_psi_keys(void);
|
||||
#endif
|
||||
|
||||
struct st_mysql_file;
|
||||
extern struct st_mysql_file *mysql_stdin;
|
||||
|
||||
C_MODE_END
|
||||
#endif /* _my_sys_h */
|
||||
|
1398
include/mysql/psi/mysql_file.h
Normal file
1398
include/mysql/psi/mysql_file.h
Normal file
File diff suppressed because it is too large
Load Diff
884
include/mysql/psi/mysql_thread.h
Normal file
884
include/mysql/psi/mysql_thread.h
Normal file
@ -0,0 +1,884 @@
|
||||
/* Copyright (C) 2008-2009 Sun Microsystems, Inc
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#ifndef MYSQL_THREAD_H
|
||||
#define MYSQL_THREAD_H
|
||||
|
||||
/**
|
||||
@file mysql/psi/mysql_thread.h
|
||||
Instrumentation helpers for mysys threads, mutexes,
|
||||
read write locks and conditions.
|
||||
This header file provides the necessary declarations
|
||||
to use the mysys thread API with the performance schema instrumentation.
|
||||
In some compilers (SunStudio), 'static inline' functions, when declared
|
||||
but not used, are not optimized away (because they are unused) by default,
|
||||
so that including a static inline function from a header file does
|
||||
create unwanted dependencies, causing unresolved symbols at link time.
|
||||
Other compilers, like gcc, optimize these dependencies by default.
|
||||
|
||||
Since the instrumented APIs declared here are wrapper on top
|
||||
of my_pthread / safemutex / etc APIs,
|
||||
including mysql/psi/mysql_thread.h assumes that
|
||||
the dependency on my_pthread and safemutex already exists.
|
||||
*/
|
||||
/*
|
||||
Note: there are several orthogonal dimensions here.
|
||||
|
||||
Dimension 1: Instrumentation
|
||||
HAVE_PSI_INTERFACE is defined when the instrumentation is compiled in.
|
||||
This may happen both in debug or production builds.
|
||||
|
||||
Dimension 2: Debug
|
||||
SAFE_MUTEX is defined when debug is compiled in.
|
||||
This may happen both with and without instrumentation.
|
||||
|
||||
Dimension 3: Platform
|
||||
Mutexes are implemented with one of:
|
||||
- the pthread library
|
||||
- fast mutexes
|
||||
- window apis
|
||||
This is implemented by various macro definitions in my_pthread.h
|
||||
|
||||
This causes complexity with '#ifdef'-ery that can't be avoided.
|
||||
*/
|
||||
|
||||
#include "mysql/psi/psi.h"
|
||||
|
||||
/**
|
||||
@defgroup Thread_instrumentation Thread Instrumentation
|
||||
@ingroup Instrumentation_interface
|
||||
@{
|
||||
*/
|
||||
|
||||
/**
|
||||
An instrumented mutex structure.
|
||||
@sa mysql_mutex_t
|
||||
*/
|
||||
struct st_mysql_mutex
|
||||
{
|
||||
/** The real mutex. */
|
||||
pthread_mutex_t m_mutex;
|
||||
/**
|
||||
The instrumentation hook.
|
||||
Note that this hook is not conditionally defined,
|
||||
for binary compatibility of the @c mysql_mutex_t interface.
|
||||
*/
|
||||
struct PSI_mutex *m_psi;
|
||||
};
|
||||
|
||||
/**
|
||||
Type of an instrumented mutex.
|
||||
@c mysql_mutex_t is a drop-in replacement for @c pthread_mutex_t.
|
||||
@sa mysql_mutex_assert_owner
|
||||
@sa mysql_mutex_assert_not_owner
|
||||
@sa mysql_mutex_init
|
||||
@sa mysql_mutex_lock
|
||||
@sa mysql_mutex_unlock
|
||||
@sa mysql_mutex_destroy
|
||||
*/
|
||||
typedef struct st_mysql_mutex mysql_mutex_t;
|
||||
|
||||
/**
|
||||
An instrumented rwlock structure.
|
||||
@sa mysql_rwlock_t
|
||||
*/
|
||||
struct st_mysql_rwlock
|
||||
{
|
||||
/** The real rwlock */
|
||||
rw_lock_t m_rwlock;
|
||||
/**
|
||||
The instrumentation hook.
|
||||
Note that this hook is not conditionally defined,
|
||||
for binary compatibility of the @c mysql_rwlock_t interface.
|
||||
*/
|
||||
struct PSI_rwlock *m_psi;
|
||||
};
|
||||
|
||||
/**
|
||||
Type of an instrumented rwlock.
|
||||
@c mysql_rwlock_t is a drop-in replacement for @c pthread_rwlock_t.
|
||||
@sa mysql_rwlock_init
|
||||
@sa mysql_rwlock_rdlock
|
||||
@sa mysql_rwlock_tryrdlock
|
||||
@sa mysql_rwlock_wrlock
|
||||
@sa mysql_rwlock_trywrlock
|
||||
@sa mysql_rwlock_unlock
|
||||
@sa mysql_rwlock_destroy
|
||||
*/
|
||||
typedef struct st_mysql_rwlock mysql_rwlock_t;
|
||||
|
||||
/**
|
||||
An instrumented cond structure.
|
||||
@sa mysql_cond_t
|
||||
*/
|
||||
struct st_mysql_cond
|
||||
{
|
||||
/** The real condition */
|
||||
pthread_cond_t m_cond;
|
||||
/**
|
||||
The instrumentation hook.
|
||||
Note that this hook is not conditionally defined,
|
||||
for binary compatibility of the @c mysql_cond_t interface.
|
||||
*/
|
||||
struct PSI_cond *m_psi;
|
||||
};
|
||||
|
||||
/**
|
||||
Type of an instrumented condition.
|
||||
@c mysql_cond_t is a drop-in replacement for @c pthread_cond_t.
|
||||
@sa mysql_cond_init
|
||||
@sa mysql_cond_wait
|
||||
@sa mysql_cond_timedwait
|
||||
@sa mysql_cond_signal
|
||||
@sa mysql_cond_broadcast
|
||||
@sa mysql_cond_destroy
|
||||
*/
|
||||
typedef struct st_mysql_cond mysql_cond_t;
|
||||
|
||||
/*
|
||||
Consider the following code:
|
||||
static inline void foo() { bar(); }
|
||||
when foo() is never called.
|
||||
|
||||
With gcc, foo() is a local static function, so the dependencies
|
||||
are optimized away at compile time, and there is no dependency on bar().
|
||||
With other compilers (HP, Sun Studio), the function foo() implementation
|
||||
is compiled, and bar() needs to be present to link.
|
||||
|
||||
Due to the existing header dependencies in MySQL code, this header file
|
||||
is sometime used when it is not needed, which in turn cause link failures
|
||||
on some platforms.
|
||||
The proper fix would be to cut these extra dependencies in the calling code.
|
||||
DISABLE_MYSQL_THREAD_H is a work around to limit dependencies.
|
||||
*/
|
||||
#ifndef DISABLE_MYSQL_THREAD_H
|
||||
|
||||
/**
|
||||
@def mysql_mutex_assert_owner(M)
|
||||
Wrapper, to use safe_mutex_assert_owner with instrumented mutexes.
|
||||
@c mysql_mutex_assert_owner is a drop-in replacement
|
||||
for @c safe_mutex_assert_owner.
|
||||
*/
|
||||
#define mysql_mutex_assert_owner(M) \
|
||||
safe_mutex_assert_owner(&(M)->m_mutex)
|
||||
|
||||
/**
|
||||
@def mysql_mutex_assert_not_owner(M)
|
||||
Wrapper, to use safe_mutex_assert_not_owner with instrumented mutexes.
|
||||
@c mysql_mutex_assert_not_owner is a drop-in replacement
|
||||
for @c safe_mutex_assert_not_owner.
|
||||
*/
|
||||
#define mysql_mutex_assert_not_owner(M) \
|
||||
safe_mutex_assert_not_owner(&(M)->m_mutex)
|
||||
|
||||
/**
|
||||
@def mysql_mutex_init(K, M, A)
|
||||
Instrumented mutex_init.
|
||||
@c mysql_mutex_init is a replacement for @c pthread_mutex_init.
|
||||
@param K The PSI_mutex_key for this instrumented mutex
|
||||
@param M The mutex to initialize
|
||||
@param A Mutex attributes
|
||||
*/
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#ifdef SAFE_MUTEX
|
||||
#define mysql_mutex_init(K, M, A) \
|
||||
inline_mysql_mutex_init(K, M, A, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_mutex_init(K, M, A) \
|
||||
inline_mysql_mutex_init(K, M, A)
|
||||
#endif
|
||||
#else
|
||||
#ifdef SAFE_MUTEX
|
||||
#define mysql_mutex_init(K, M, A) \
|
||||
inline_mysql_mutex_init(M, A, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_mutex_init(K, M, A) \
|
||||
inline_mysql_mutex_init(M, A)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_mutex_destroy(M)
|
||||
Instrumented mutex_destroy.
|
||||
@c mysql_mutex_destroy is a drop-in replacement
|
||||
for @c pthread_mutex_destroy.
|
||||
*/
|
||||
#ifdef SAFE_MUTEX
|
||||
#define mysql_mutex_destroy(M) \
|
||||
inline_mysql_mutex_destroy(M, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_mutex_destroy(M) \
|
||||
inline_mysql_mutex_destroy(M)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_mutex_lock(M)
|
||||
Instrumented mutex_lock.
|
||||
@c mysql_mutex_lock is a drop-in replacement for @c pthread_mutex_lock.
|
||||
@param M The mutex to lock
|
||||
*/
|
||||
|
||||
#if defined(SAFE_MUTEX) || defined (HAVE_PSI_INTERFACE)
|
||||
#define mysql_mutex_lock(M) \
|
||||
inline_mysql_mutex_lock(M, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_mutex_lock(M) \
|
||||
inline_mysql_mutex_lock(M)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_mutex_trylock(M)
|
||||
Instrumented mutex_lock.
|
||||
@c mysql_mutex_trylock is a drop-in replacement
|
||||
for @c pthread_mutex_trylock.
|
||||
*/
|
||||
|
||||
#if defined(SAFE_MUTEX) || defined (HAVE_PSI_INTERFACE)
|
||||
#define mysql_mutex_trylock(M) \
|
||||
inline_mysql_mutex_trylock(M, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_mutex_trylock(M) \
|
||||
inline_mysql_mutex_trylock(M)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_mutex_unlock(M)
|
||||
Instrumented mutex_unlock.
|
||||
@c mysql_mutex_unlock is a drop-in replacement for @c pthread_mutex_unlock.
|
||||
*/
|
||||
#ifdef SAFE_MUTEX
|
||||
#define mysql_mutex_unlock(M) \
|
||||
inline_mysql_mutex_unlock(M, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_mutex_unlock(M) \
|
||||
inline_mysql_mutex_unlock(M)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_rwlock_init(K, RW)
|
||||
Instrumented rwlock_init.
|
||||
@c mysql_rwlock_init is a replacement for @c pthread_rwlock_init.
|
||||
Note that pthread_rwlockattr_t is not supported in MySQL.
|
||||
@param K The PSI_rwlock_key for this instrumented rwlock
|
||||
@param RW The rwlock to initialize
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(K, RW)
|
||||
#else
|
||||
#define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(RW)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_rwlock_destroy(RW)
|
||||
Instrumented rwlock_destroy.
|
||||
@c mysql_rwlock_destroy is a drop-in replacement
|
||||
for @c pthread_rwlock_destroy.
|
||||
*/
|
||||
#define mysql_rwlock_destroy(RW) inline_mysql_rwlock_destroy(RW)
|
||||
|
||||
/**
|
||||
@def mysql_rwlock_rdlock(RW)
|
||||
Instrumented rwlock_rdlock.
|
||||
@c mysql_rwlock_rdlock is a drop-in replacement
|
||||
for @c pthread_rwlock_rdlock.
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_rwlock_rdlock(RW) \
|
||||
inline_mysql_rwlock_rdlock(RW, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_rwlock_rdlock(RW) \
|
||||
inline_mysql_rwlock_rdlock(RW)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_rwlock_wrlock(RW)
|
||||
Instrumented rwlock_wrlock.
|
||||
@c mysql_rwlock_wrlock is a drop-in replacement
|
||||
for @c pthread_rwlock_wrlock.
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_rwlock_wrlock(RW) \
|
||||
inline_mysql_rwlock_wrlock(RW, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_rwlock_wrlock(RW) \
|
||||
inline_mysql_rwlock_wrlock(RW)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_rwlock_tryrdlock(RW)
|
||||
Instrumented rwlock_tryrdlock.
|
||||
@c mysql_rwlock_tryrdlock is a drop-in replacement
|
||||
for @c pthread_rwlock_tryrdlock.
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_rwlock_tryrdlock(RW) \
|
||||
inline_mysql_rwlock_tryrdlock(RW, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_rwlock_tryrdlock(RW) \
|
||||
inline_mysql_rwlock_tryrdlock(RW)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_rwlock_trywrlock(RW)
|
||||
Instrumented rwlock_trywrlock.
|
||||
@c mysql_rwlock_trywrlock is a drop-in replacement
|
||||
for @c pthread_rwlock_trywrlock.
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_rwlock_trywrlock(RW) \
|
||||
inline_mysql_rwlock_trywrlock(RW, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_rwlock_trywrlock(RW) \
|
||||
inline_mysql_rwlock_trywrlock(RW)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_rwlock_unlock(RW)
|
||||
Instrumented rwlock_unlock.
|
||||
@c mysql_rwlock_unlock is a drop-in replacement
|
||||
for @c pthread_rwlock_unlock.
|
||||
*/
|
||||
#define mysql_rwlock_unlock(RW) inline_mysql_rwlock_unlock(RW)
|
||||
|
||||
/**
|
||||
@def mysql_cond_init(K, C, A)
|
||||
Instrumented rwlock_init.
|
||||
@c mysql_cond_init is a replacement for @c pthread_cond_init.
|
||||
@param C The cond to initialize
|
||||
@param K The PSI_cond_key for this instrumented cond
|
||||
@param A Condition attributes
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_cond_init(K, C, A) inline_mysql_cond_init(K, C, A)
|
||||
#else
|
||||
#define mysql_cond_init(K, C, A) inline_mysql_cond_init(C, A)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_cond_destroy(C)
|
||||
Instrumented cond_destroy.
|
||||
@c mysql_cond_destroy is a drop-in replacement for @c pthread_cond_destroy.
|
||||
*/
|
||||
#define mysql_cond_destroy(C) inline_mysql_cond_destroy(C)
|
||||
|
||||
/**
|
||||
@def mysql_cond_wait(C)
|
||||
Instrumented cond_wait.
|
||||
@c mysql_cond_wait is a drop-in replacement for @c pthread_cond_wait.
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_cond_wait(C, M) \
|
||||
inline_mysql_cond_wait(C, M, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_cond_wait(C, M) \
|
||||
inline_mysql_cond_wait(C, M)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_cond_timedwait(C, M, W)
|
||||
Instrumented cond_timedwait.
|
||||
@c mysql_cond_timedwait is a drop-in replacement
|
||||
for @c pthread_cond_timedwait.
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_cond_timedwait(C, M, W) \
|
||||
inline_mysql_cond_timedwait(C, M, W, __FILE__, __LINE__)
|
||||
#else
|
||||
#define mysql_cond_timedwait(C, M, W) \
|
||||
inline_mysql_cond_timedwait(C, M, W)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_cond_signal(C)
|
||||
Instrumented cond_signal.
|
||||
@c mysql_cond_signal is a drop-in replacement for @c pthread_cond_signal.
|
||||
*/
|
||||
#define mysql_cond_signal(C) inline_mysql_cond_signal(C)
|
||||
|
||||
/**
|
||||
@def mysql_cond_broadcast(C)
|
||||
Instrumented cond_broadcast.
|
||||
@c mysql_cond_broadcast is a drop-in replacement
|
||||
for @c pthread_cond_broadcast.
|
||||
*/
|
||||
#define mysql_cond_broadcast(C) inline_mysql_cond_broadcast(C)
|
||||
|
||||
|
||||
/**
|
||||
@def mysql_thread_create(K, P1, P2, P3, P4)
|
||||
Instrumented pthread_create.
|
||||
This function creates both the thread instrumentation and a thread.
|
||||
@c mysql_thread_create is a replacement for @c pthread_create.
|
||||
The parameter P4 (or, if it is NULL, P1) will be used as the
|
||||
instrumented thread "indentity".
|
||||
Providing a P1 / P4 parameter with a different value for each call
|
||||
will on average improve performances, since this thread identity value
|
||||
is used internally to randomize access to data and prevent contention.
|
||||
This is optional, and the improvement is not guaranteed, only statistical.
|
||||
@param K The PSI_thread_key for this instrumented thread
|
||||
@param P1 pthread_create parameter 1
|
||||
@param P2 pthread_create parameter 2
|
||||
@param P3 pthread_create parameter 3
|
||||
@param P4 pthread_create parameter 4
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_thread_create(K, P1, P2, P3, P4) \
|
||||
inline_mysql_thread_create(K, P1, P2, P3, P4)
|
||||
#else
|
||||
#define mysql_thread_create(K, P1, P2, P3, P4) \
|
||||
pthread_create(P1, P2, P3, P4)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@def mysql_thread_set_psi_id(I)
|
||||
Set the thread indentifier for the instrumentation.
|
||||
@param I The thread identifier
|
||||
*/
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
#define mysql_thread_set_psi_id(I) inline_mysql_thread_set_psi_id(I)
|
||||
#else
|
||||
#define mysql_thread_set_psi_id(I) do {} while (0)
|
||||
#endif
|
||||
|
||||
static inline int inline_mysql_mutex_init(
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
PSI_mutex_key key,
|
||||
#endif
|
||||
mysql_mutex_t *that,
|
||||
const pthread_mutexattr_t *attr
|
||||
#ifdef SAFE_MUTEX
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
that->m_psi= PSI_server ? PSI_server->init_mutex(key, &that->m_mutex)
|
||||
: NULL;
|
||||
#else
|
||||
that->m_psi= NULL;
|
||||
#endif
|
||||
#ifdef SAFE_MUTEX
|
||||
return safe_mutex_init(&that->m_mutex, attr, src_file, src_line);
|
||||
#else
|
||||
return pthread_mutex_init(&that->m_mutex, attr);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int inline_mysql_mutex_destroy(
|
||||
mysql_mutex_t *that
|
||||
#ifdef SAFE_MUTEX
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
PSI_server->destroy_mutex(that->m_psi);
|
||||
that->m_psi= NULL;
|
||||
}
|
||||
#endif
|
||||
#ifdef SAFE_MUTEX
|
||||
return safe_mutex_destroy(&that->m_mutex, src_file, src_line);
|
||||
#else
|
||||
return pthread_mutex_destroy(&that->m_mutex);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int inline_mysql_mutex_lock(
|
||||
mysql_mutex_t *that
|
||||
#if defined(SAFE_MUTEX) || defined (HAVE_PSI_INTERFACE)
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_mutex_locker *locker= NULL;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
locker= PSI_server->get_thread_mutex_locker(that->m_psi, PSI_MUTEX_LOCK);
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->start_mutex_wait(locker, src_file, src_line);
|
||||
}
|
||||
#endif
|
||||
#ifdef SAFE_MUTEX
|
||||
result= safe_mutex_lock(&that->m_mutex, FALSE, src_file, src_line);
|
||||
#else
|
||||
result= pthread_mutex_lock(&that->m_mutex);
|
||||
#endif
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->end_mutex_wait(locker, result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_mutex_trylock(
|
||||
mysql_mutex_t *that
|
||||
#if defined(SAFE_MUTEX) || defined (HAVE_PSI_INTERFACE)
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_mutex_locker *locker= NULL;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
locker= PSI_server->get_thread_mutex_locker(that->m_psi, PSI_MUTEX_TRYLOCK);
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->start_mutex_wait(locker, src_file, src_line);
|
||||
}
|
||||
#endif
|
||||
#ifdef SAFE_MUTEX
|
||||
result= safe_mutex_lock(&that->m_mutex, TRUE, src_file, src_line);
|
||||
#else
|
||||
result= pthread_mutex_trylock(&that->m_mutex);
|
||||
#endif
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->end_mutex_wait(locker, result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_mutex_unlock(
|
||||
mysql_mutex_t *that
|
||||
#ifdef SAFE_MUTEX
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_thread *thread;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
thread= PSI_server->get_thread();
|
||||
if (likely(thread != NULL))
|
||||
PSI_server->unlock_mutex(thread, that->m_psi);
|
||||
}
|
||||
#endif
|
||||
#ifdef SAFE_MUTEX
|
||||
result= safe_mutex_unlock(&that->m_mutex, src_file, src_line);
|
||||
#else
|
||||
result= pthread_mutex_unlock(&that->m_mutex);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_rwlock_init(
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
PSI_rwlock_key key,
|
||||
#endif
|
||||
mysql_rwlock_t *that)
|
||||
{
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
that->m_psi= (PSI_server ? PSI_server->init_rwlock(key, &that->m_rwlock)
|
||||
: NULL);
|
||||
#else
|
||||
that->m_psi= NULL;
|
||||
#endif
|
||||
/*
|
||||
pthread_rwlockattr_t is not used in MySQL.
|
||||
*/
|
||||
return my_rwlock_init(&that->m_rwlock, NULL);
|
||||
}
|
||||
|
||||
static inline int inline_mysql_rwlock_destroy(
|
||||
mysql_rwlock_t *that)
|
||||
{
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
PSI_server->destroy_rwlock(that->m_psi);
|
||||
that->m_psi= NULL;
|
||||
}
|
||||
#endif
|
||||
return rwlock_destroy(&that->m_rwlock);
|
||||
}
|
||||
|
||||
static inline int inline_mysql_rwlock_rdlock(
|
||||
mysql_rwlock_t *that
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_rwlock_locker *locker= NULL;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
locker= PSI_server->get_thread_rwlock_locker(that->m_psi,
|
||||
PSI_RWLOCK_READLOCK);
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->start_rwlock_rdwait(locker, src_file, src_line);
|
||||
}
|
||||
#endif
|
||||
result= rw_rdlock(&that->m_rwlock);
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->end_rwlock_rdwait(locker, result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_rwlock_wrlock(
|
||||
mysql_rwlock_t *that
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_rwlock_locker *locker= NULL;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
locker= PSI_server->get_thread_rwlock_locker(that->m_psi,
|
||||
PSI_RWLOCK_WRITELOCK);
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->start_rwlock_wrwait(locker, src_file, src_line);
|
||||
}
|
||||
#endif
|
||||
result= rw_wrlock(&that->m_rwlock);
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->end_rwlock_wrwait(locker, result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_rwlock_tryrdlock(
|
||||
mysql_rwlock_t *that
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_rwlock_locker *locker= NULL;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
locker= PSI_server->get_thread_rwlock_locker(that->m_psi,
|
||||
PSI_RWLOCK_TRYREADLOCK);
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->start_rwlock_rdwait(locker, src_file, src_line);
|
||||
}
|
||||
#endif
|
||||
result= rw_tryrdlock(&that->m_rwlock);
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->end_rwlock_rdwait(locker, result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_rwlock_trywrlock(
|
||||
mysql_rwlock_t *that
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_rwlock_locker *locker= NULL;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
locker= PSI_server->get_thread_rwlock_locker(that->m_psi,
|
||||
PSI_RWLOCK_TRYWRITELOCK);
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->start_rwlock_wrwait(locker, src_file, src_line);
|
||||
}
|
||||
#endif
|
||||
result= rw_trywrlock(&that->m_rwlock);
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->end_rwlock_wrwait(locker, result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_rwlock_unlock(
|
||||
mysql_rwlock_t *that)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_thread *thread;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
thread= PSI_server->get_thread();
|
||||
if (likely(thread != NULL))
|
||||
PSI_server->unlock_rwlock(thread, that->m_psi);
|
||||
}
|
||||
#endif
|
||||
result= rw_unlock(&that->m_rwlock);
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_cond_init(
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
PSI_cond_key key,
|
||||
#endif
|
||||
mysql_cond_t *that,
|
||||
const pthread_condattr_t *attr)
|
||||
{
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
that->m_psi= (PSI_server ? PSI_server->init_cond(key, &that->m_cond)
|
||||
: NULL);
|
||||
#else
|
||||
that->m_psi= NULL;
|
||||
#endif
|
||||
return pthread_cond_init(&that->m_cond, attr);
|
||||
}
|
||||
|
||||
static inline int inline_mysql_cond_destroy(
|
||||
mysql_cond_t *that)
|
||||
{
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
PSI_server->destroy_cond(that->m_psi);
|
||||
that->m_psi= NULL;
|
||||
}
|
||||
#endif
|
||||
return pthread_cond_destroy(&that->m_cond);
|
||||
}
|
||||
|
||||
static inline int inline_mysql_cond_wait(
|
||||
mysql_cond_t *that,
|
||||
mysql_mutex_t *mutex
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_cond_locker *locker= NULL;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
locker= PSI_server->get_thread_cond_locker(that->m_psi, mutex->m_psi,
|
||||
PSI_COND_WAIT);
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->start_cond_wait(locker, src_file, src_line);
|
||||
}
|
||||
#endif
|
||||
result= pthread_cond_wait(&that->m_cond, &mutex->m_mutex);
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->end_cond_wait(locker, result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_cond_timedwait(
|
||||
mysql_cond_t *that,
|
||||
mysql_mutex_t *mutex,
|
||||
struct timespec *abstime
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
, const char *src_file, uint src_line
|
||||
#endif
|
||||
)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_cond_locker *locker= NULL;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
locker= PSI_server->get_thread_cond_locker(that->m_psi, mutex->m_psi,
|
||||
PSI_COND_TIMEDWAIT);
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->start_cond_wait(locker, src_file, src_line);
|
||||
}
|
||||
#endif
|
||||
result= pthread_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime);
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (likely(locker != NULL))
|
||||
PSI_server->end_cond_wait(locker, result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_cond_signal(
|
||||
mysql_cond_t *that)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_thread *thread;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
thread= PSI_server->get_thread();
|
||||
if (likely(thread != NULL))
|
||||
PSI_server->signal_cond(thread, that->m_psi);
|
||||
}
|
||||
#endif
|
||||
result= pthread_cond_signal(&that->m_cond);
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline int inline_mysql_cond_broadcast(
|
||||
mysql_cond_t *that)
|
||||
{
|
||||
int result;
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
struct PSI_thread *thread;
|
||||
if (likely(PSI_server && that->m_psi))
|
||||
{
|
||||
thread= PSI_server->get_thread();
|
||||
if (likely(thread != NULL))
|
||||
PSI_server->broadcast_cond(thread, that->m_psi);
|
||||
}
|
||||
#endif
|
||||
result= pthread_cond_broadcast(&that->m_cond);
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
static inline int inline_mysql_thread_create(
|
||||
PSI_thread_key key,
|
||||
pthread_t *thread, const pthread_attr_t *attr,
|
||||
void *(*start_routine)(void*), void *arg)
|
||||
{
|
||||
int result;
|
||||
if (likely(PSI_server != NULL))
|
||||
result= PSI_server->spawn_thread(key, thread, attr, start_routine, arg);
|
||||
else
|
||||
result= pthread_create(thread, attr, start_routine, arg);
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline void inline_mysql_thread_set_psi_id(ulong id)
|
||||
{
|
||||
if (likely(PSI_server != NULL))
|
||||
{
|
||||
struct PSI_thread *psi= PSI_server->get_thread();
|
||||
if (likely(psi != NULL))
|
||||
PSI_server->set_thread_id(psi, id);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* DISABLE_MYSQL_THREAD_H */
|
||||
|
||||
/** @} (end of group Thread_instrumentation) */
|
||||
|
||||
#endif
|
||||
|
1086
include/mysql/psi/psi.h
Normal file
1086
include/mysql/psi/psi.h
Normal file
File diff suppressed because it is too large
Load Diff
26
include/mysql/psi/psi_abi_v1.h
Normal file
26
include/mysql/psi/psi_abi_v1.h
Normal file
@ -0,0 +1,26 @@
|
||||
/* Copyright (C) 2008-2009 Sun Microsystems, Inc
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/**
|
||||
@file mysql/psi/psi_abi_v1.h
|
||||
ABI check for mysql/psi/psi.h, when using PSI_VERSION_1.
|
||||
This file is only used to automate detection of changes between versions.
|
||||
Do not include this file, include mysql/psi/psi.h instead.
|
||||
*/
|
||||
#define USE_PSI_1
|
||||
#define HAVE_PSI_INTERFACE
|
||||
#define _global_h
|
||||
#include "mysql/psi/psi.h"
|
||||
|
242
include/mysql/psi/psi_abi_v1.h.pp
Normal file
242
include/mysql/psi/psi_abi_v1.h.pp
Normal file
@ -0,0 +1,242 @@
|
||||
#include "mysql/psi/psi.h"
|
||||
C_MODE_START
|
||||
struct PSI_mutex;
|
||||
struct PSI_rwlock;
|
||||
struct PSI_cond;
|
||||
struct PSI_table_share;
|
||||
struct PSI_table;
|
||||
struct PSI_thread;
|
||||
struct PSI_file;
|
||||
struct PSI_bootstrap
|
||||
{
|
||||
void* (*get_interface)(int version);
|
||||
};
|
||||
struct PSI_mutex_locker;
|
||||
struct PSI_rwlock_locker;
|
||||
struct PSI_cond_locker;
|
||||
struct PSI_file_locker;
|
||||
enum PSI_mutex_operation
|
||||
{
|
||||
PSI_MUTEX_LOCK= 0,
|
||||
PSI_MUTEX_TRYLOCK= 1
|
||||
};
|
||||
enum PSI_rwlock_operation
|
||||
{
|
||||
PSI_RWLOCK_READLOCK= 0,
|
||||
PSI_RWLOCK_WRITELOCK= 1,
|
||||
PSI_RWLOCK_TRYREADLOCK= 2,
|
||||
PSI_RWLOCK_TRYWRITELOCK= 3
|
||||
};
|
||||
enum PSI_cond_operation
|
||||
{
|
||||
PSI_COND_WAIT= 0,
|
||||
PSI_COND_TIMEDWAIT= 1
|
||||
};
|
||||
enum PSI_file_operation
|
||||
{
|
||||
PSI_FILE_CREATE= 0,
|
||||
PSI_FILE_CREATE_TMP= 1,
|
||||
PSI_FILE_OPEN= 2,
|
||||
PSI_FILE_STREAM_OPEN= 3,
|
||||
PSI_FILE_CLOSE= 4,
|
||||
PSI_FILE_STREAM_CLOSE= 5,
|
||||
PSI_FILE_READ= 6,
|
||||
PSI_FILE_WRITE= 7,
|
||||
PSI_FILE_SEEK= 8,
|
||||
PSI_FILE_TELL= 9,
|
||||
PSI_FILE_FLUSH= 10,
|
||||
PSI_FILE_STAT= 11,
|
||||
PSI_FILE_FSTAT= 12,
|
||||
PSI_FILE_CHSIZE= 13,
|
||||
PSI_FILE_DELETE= 14,
|
||||
PSI_FILE_RENAME= 15,
|
||||
PSI_FILE_SYNC= 16
|
||||
};
|
||||
struct PSI_table_locker;
|
||||
typedef unsigned int PSI_mutex_key;
|
||||
typedef unsigned int PSI_rwlock_key;
|
||||
typedef unsigned int PSI_cond_key;
|
||||
typedef unsigned int PSI_thread_key;
|
||||
typedef unsigned int PSI_file_key;
|
||||
struct PSI_mutex_info_v1
|
||||
{
|
||||
PSI_mutex_key *m_key;
|
||||
const char *m_name;
|
||||
int m_flags;
|
||||
};
|
||||
struct PSI_rwlock_info_v1
|
||||
{
|
||||
PSI_rwlock_key *m_key;
|
||||
const char *m_name;
|
||||
int m_flags;
|
||||
};
|
||||
struct PSI_cond_info_v1
|
||||
{
|
||||
PSI_cond_key *m_key;
|
||||
const char *m_name;
|
||||
int m_flags;
|
||||
};
|
||||
struct PSI_thread_info_v1
|
||||
{
|
||||
PSI_thread_key *m_key;
|
||||
const char *m_name;
|
||||
int m_flags;
|
||||
};
|
||||
struct PSI_file_info_v1
|
||||
{
|
||||
PSI_file_key *m_key;
|
||||
const char *m_name;
|
||||
int m_flags;
|
||||
};
|
||||
typedef void (*register_mutex_v1_t)
|
||||
(const char *category, struct PSI_mutex_info_v1 *info, int count);
|
||||
typedef void (*register_rwlock_v1_t)
|
||||
(const char *category, struct PSI_rwlock_info_v1 *info, int count);
|
||||
typedef void (*register_cond_v1_t)
|
||||
(const char *category, struct PSI_cond_info_v1 *info, int count);
|
||||
typedef void (*register_thread_v1_t)
|
||||
(const char *category, struct PSI_thread_info_v1 *info, int count);
|
||||
typedef void (*register_file_v1_t)
|
||||
(const char *category, struct PSI_file_info_v1 *info, int count);
|
||||
typedef struct PSI_mutex* (*init_mutex_v1_t)
|
||||
(PSI_mutex_key key, const void *identity);
|
||||
typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex);
|
||||
typedef struct PSI_rwlock* (*init_rwlock_v1_t)
|
||||
(PSI_rwlock_key key, const void *identity);
|
||||
typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock);
|
||||
typedef struct PSI_cond* (*init_cond_v1_t)
|
||||
(PSI_cond_key key, const void *identity);
|
||||
typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond);
|
||||
typedef struct PSI_table_share* (*get_table_share_v1_t)
|
||||
(const char *schema_name, int schema_name_length, const char *table_name,
|
||||
int table_name_length, const void *identity);
|
||||
typedef void (*release_table_share_v1_t)(struct PSI_table_share *share);
|
||||
typedef struct PSI_table* (*open_table_v1_t)
|
||||
(struct PSI_table_share *share, const void *identity);
|
||||
typedef void (*close_table_v1_t)(struct PSI_table *table);
|
||||
typedef void (*create_file_v1_t)(PSI_file_key key, const char *name,
|
||||
File file);
|
||||
typedef int (*spawn_thread_v1_t)(PSI_thread_key key,
|
||||
pthread_t *thread,
|
||||
const pthread_attr_t *attr,
|
||||
void *(*start_routine)(void*), void *arg);
|
||||
typedef struct PSI_thread* (*new_thread_v1_t)
|
||||
(PSI_thread_key key, const void *identity, ulong thread_id);
|
||||
typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread,
|
||||
unsigned long id);
|
||||
typedef struct PSI_thread* (*get_thread_v1_t)(void);
|
||||
typedef void (*set_thread_v1_t)(struct PSI_thread *thread);
|
||||
typedef void (*delete_current_thread_v1_t)(void);
|
||||
typedef struct PSI_mutex_locker* (*get_thread_mutex_locker_v1_t)
|
||||
(struct PSI_mutex *mutex, enum PSI_mutex_operation op);
|
||||
typedef struct PSI_rwlock_locker* (*get_thread_rwlock_locker_v1_t)
|
||||
(struct PSI_rwlock *rwlock, enum PSI_rwlock_operation op);
|
||||
typedef struct PSI_cond_locker* (*get_thread_cond_locker_v1_t)
|
||||
(struct PSI_cond *cond, struct PSI_mutex *mutex,
|
||||
enum PSI_cond_operation op);
|
||||
typedef struct PSI_table_locker* (*get_thread_table_locker_v1_t)
|
||||
(struct PSI_table *table);
|
||||
typedef struct PSI_file_locker* (*get_thread_file_name_locker_v1_t)
|
||||
(PSI_file_key key, enum PSI_file_operation op, const char *name,
|
||||
const void *identity);
|
||||
typedef struct PSI_file_locker* (*get_thread_file_stream_locker_v1_t)
|
||||
(struct PSI_file *file, enum PSI_file_operation op);
|
||||
typedef struct PSI_file_locker* (*get_thread_file_descriptor_locker_v1_t)
|
||||
(File file, enum PSI_file_operation op);
|
||||
typedef void (*unlock_mutex_v1_t)
|
||||
(struct PSI_thread *thread, struct PSI_mutex *mutex);
|
||||
typedef void (*unlock_rwlock_v1_t)
|
||||
(struct PSI_thread *thread, struct PSI_rwlock *rwlock);
|
||||
typedef void (*signal_cond_v1_t)
|
||||
(struct PSI_thread *thread, struct PSI_cond *cond);
|
||||
typedef void (*broadcast_cond_v1_t)
|
||||
(struct PSI_thread *thread, struct PSI_cond *cond);
|
||||
typedef void (*start_mutex_wait_v1_t)
|
||||
(struct PSI_mutex_locker *locker, const char *src_file, uint src_line);
|
||||
typedef void (*end_mutex_wait_v1_t)
|
||||
(struct PSI_mutex_locker *locker, int rc);
|
||||
typedef void (*start_rwlock_rdwait_v1_t)
|
||||
(struct PSI_rwlock_locker *locker, const char *src_file, uint src_line);
|
||||
typedef void (*end_rwlock_rdwait_v1_t)
|
||||
(struct PSI_rwlock_locker *locker, int rc);
|
||||
typedef void (*start_rwlock_wrwait_v1_t)
|
||||
(struct PSI_rwlock_locker *locker, const char *src_file, uint src_line);
|
||||
typedef void (*end_rwlock_wrwait_v1_t)
|
||||
(struct PSI_rwlock_locker *locker, int rc);
|
||||
typedef void (*start_cond_wait_v1_t)
|
||||
(struct PSI_cond_locker *locker, const char *src_file, uint src_line);
|
||||
typedef void (*end_cond_wait_v1_t)
|
||||
(struct PSI_cond_locker *locker, int rc);
|
||||
typedef void (*start_table_wait_v1_t)
|
||||
(struct PSI_table_locker *locker, const char *src_file, uint src_line);
|
||||
typedef void (*end_table_wait_v1_t)(struct PSI_table_locker *locker);
|
||||
typedef struct PSI_file* (*start_file_open_wait_v1_t)
|
||||
(struct PSI_file_locker *locker, const char *src_file, uint src_line);
|
||||
typedef void (*end_file_open_wait_v1_t)(struct PSI_file_locker *locker);
|
||||
typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t)
|
||||
(struct PSI_file_locker *locker, File file);
|
||||
typedef void (*start_file_wait_v1_t)
|
||||
(struct PSI_file_locker *locker, size_t count,
|
||||
const char *src_file, uint src_line);
|
||||
typedef void (*end_file_wait_v1_t)
|
||||
(struct PSI_file_locker *locker, size_t count);
|
||||
struct PSI_v1
|
||||
{
|
||||
register_mutex_v1_t register_mutex;
|
||||
register_rwlock_v1_t register_rwlock;
|
||||
register_cond_v1_t register_cond;
|
||||
register_thread_v1_t register_thread;
|
||||
register_file_v1_t register_file;
|
||||
init_mutex_v1_t init_mutex;
|
||||
destroy_mutex_v1_t destroy_mutex;
|
||||
init_rwlock_v1_t init_rwlock;
|
||||
destroy_rwlock_v1_t destroy_rwlock;
|
||||
init_cond_v1_t init_cond;
|
||||
destroy_cond_v1_t destroy_cond;
|
||||
get_table_share_v1_t get_table_share;
|
||||
release_table_share_v1_t release_table_share;
|
||||
open_table_v1_t open_table;
|
||||
close_table_v1_t close_table;
|
||||
create_file_v1_t create_file;
|
||||
spawn_thread_v1_t spawn_thread;
|
||||
new_thread_v1_t new_thread;
|
||||
set_thread_id_v1_t set_thread_id;
|
||||
get_thread_v1_t get_thread;
|
||||
set_thread_v1_t set_thread;
|
||||
delete_current_thread_v1_t delete_current_thread;
|
||||
get_thread_mutex_locker_v1_t get_thread_mutex_locker;
|
||||
get_thread_rwlock_locker_v1_t get_thread_rwlock_locker;
|
||||
get_thread_cond_locker_v1_t get_thread_cond_locker;
|
||||
get_thread_table_locker_v1_t get_thread_table_locker;
|
||||
get_thread_file_name_locker_v1_t get_thread_file_name_locker;
|
||||
get_thread_file_stream_locker_v1_t get_thread_file_stream_locker;
|
||||
get_thread_file_descriptor_locker_v1_t get_thread_file_descriptor_locker;
|
||||
unlock_mutex_v1_t unlock_mutex;
|
||||
unlock_rwlock_v1_t unlock_rwlock;
|
||||
signal_cond_v1_t signal_cond;
|
||||
broadcast_cond_v1_t broadcast_cond;
|
||||
start_mutex_wait_v1_t start_mutex_wait;
|
||||
end_mutex_wait_v1_t end_mutex_wait;
|
||||
start_rwlock_rdwait_v1_t start_rwlock_rdwait;
|
||||
end_rwlock_rdwait_v1_t end_rwlock_rdwait;
|
||||
start_rwlock_wrwait_v1_t start_rwlock_wrwait;
|
||||
end_rwlock_wrwait_v1_t end_rwlock_wrwait;
|
||||
start_cond_wait_v1_t start_cond_wait;
|
||||
end_cond_wait_v1_t end_cond_wait;
|
||||
start_table_wait_v1_t start_table_wait;
|
||||
end_table_wait_v1_t end_table_wait;
|
||||
start_file_open_wait_v1_t start_file_open_wait;
|
||||
end_file_open_wait_v1_t end_file_open_wait;
|
||||
end_file_open_wait_and_bind_to_descriptor_v1_t
|
||||
end_file_open_wait_and_bind_to_descriptor;
|
||||
start_file_wait_v1_t start_file_wait;
|
||||
end_file_wait_v1_t end_file_wait;
|
||||
};
|
||||
typedef struct PSI_v1 PSI;
|
||||
typedef struct PSI_mutex_info_v1 PSI_mutex_info;
|
||||
typedef struct PSI_rwlock_info_v1 PSI_rwlock_info;
|
||||
typedef struct PSI_cond_info_v1 PSI_cond_info;
|
||||
typedef struct PSI_thread_info_v1 PSI_thread_info;
|
||||
typedef struct PSI_file_info_v1 PSI_file_info;
|
||||
extern MYSQL_PLUGIN_IMPORT PSI *PSI_server;
|
||||
C_MODE_END
|
26
include/mysql/psi/psi_abi_v2.h
Normal file
26
include/mysql/psi/psi_abi_v2.h
Normal file
@ -0,0 +1,26 @@
|
||||
/* Copyright (C) 2008-2009 Sun Microsystems, Inc
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/**
|
||||
@file mysql/psi/psi_abi_v1.h
|
||||
ABI check for mysql/psi/psi.h, when using PSI_VERSION_2.
|
||||
This file is only used to automate detection of changes between versions.
|
||||
Do not include this file, include mysql/psi/psi.h instead.
|
||||
*/
|
||||
#define USE_PSI_2
|
||||
#define HAVE_PSI_INTERFACE
|
||||
#define _global_h
|
||||
#include "mysql/psi/psi.h"
|
||||
|
92
include/mysql/psi/psi_abi_v2.h.pp
Normal file
92
include/mysql/psi/psi_abi_v2.h.pp
Normal file
@ -0,0 +1,92 @@
|
||||
#include "mysql/psi/psi.h"
|
||||
C_MODE_START
|
||||
struct PSI_mutex;
|
||||
struct PSI_rwlock;
|
||||
struct PSI_cond;
|
||||
struct PSI_table_share;
|
||||
struct PSI_table;
|
||||
struct PSI_thread;
|
||||
struct PSI_file;
|
||||
struct PSI_bootstrap
|
||||
{
|
||||
void* (*get_interface)(int version);
|
||||
};
|
||||
struct PSI_mutex_locker;
|
||||
struct PSI_rwlock_locker;
|
||||
struct PSI_cond_locker;
|
||||
struct PSI_file_locker;
|
||||
enum PSI_mutex_operation
|
||||
{
|
||||
PSI_MUTEX_LOCK= 0,
|
||||
PSI_MUTEX_TRYLOCK= 1
|
||||
};
|
||||
enum PSI_rwlock_operation
|
||||
{
|
||||
PSI_RWLOCK_READLOCK= 0,
|
||||
PSI_RWLOCK_WRITELOCK= 1,
|
||||
PSI_RWLOCK_TRYREADLOCK= 2,
|
||||
PSI_RWLOCK_TRYWRITELOCK= 3
|
||||
};
|
||||
enum PSI_cond_operation
|
||||
{
|
||||
PSI_COND_WAIT= 0,
|
||||
PSI_COND_TIMEDWAIT= 1
|
||||
};
|
||||
enum PSI_file_operation
|
||||
{
|
||||
PSI_FILE_CREATE= 0,
|
||||
PSI_FILE_CREATE_TMP= 1,
|
||||
PSI_FILE_OPEN= 2,
|
||||
PSI_FILE_STREAM_OPEN= 3,
|
||||
PSI_FILE_CLOSE= 4,
|
||||
PSI_FILE_STREAM_CLOSE= 5,
|
||||
PSI_FILE_READ= 6,
|
||||
PSI_FILE_WRITE= 7,
|
||||
PSI_FILE_SEEK= 8,
|
||||
PSI_FILE_TELL= 9,
|
||||
PSI_FILE_FLUSH= 10,
|
||||
PSI_FILE_STAT= 11,
|
||||
PSI_FILE_FSTAT= 12,
|
||||
PSI_FILE_CHSIZE= 13,
|
||||
PSI_FILE_DELETE= 14,
|
||||
PSI_FILE_RENAME= 15,
|
||||
PSI_FILE_SYNC= 16
|
||||
};
|
||||
struct PSI_table_locker;
|
||||
typedef unsigned int PSI_mutex_key;
|
||||
typedef unsigned int PSI_rwlock_key;
|
||||
typedef unsigned int PSI_cond_key;
|
||||
typedef unsigned int PSI_thread_key;
|
||||
typedef unsigned int PSI_file_key;
|
||||
struct PSI_v2
|
||||
{
|
||||
int placeholder;
|
||||
};
|
||||
struct PSI_mutex_info_v2
|
||||
{
|
||||
int placeholder;
|
||||
};
|
||||
struct PSI_rwlock_info_v2
|
||||
{
|
||||
int placeholder;
|
||||
};
|
||||
struct PSI_cond_info_v2
|
||||
{
|
||||
int placeholder;
|
||||
};
|
||||
struct PSI_thread_info_v2
|
||||
{
|
||||
int placeholder;
|
||||
};
|
||||
struct PSI_file_info_v2
|
||||
{
|
||||
int placeholder;
|
||||
};
|
||||
typedef struct PSI_v2 PSI;
|
||||
typedef struct PSI_mutex_info_v2 PSI_mutex_info;
|
||||
typedef struct PSI_rwlock_info_v2 PSI_rwlock_info;
|
||||
typedef struct PSI_cond_info_v2 PSI_cond_info;
|
||||
typedef struct PSI_thread_info_v2 PSI_thread_info;
|
||||
typedef struct PSI_file_info_v2 PSI_file_info;
|
||||
extern MYSQL_PLUGIN_IMPORT PSI *PSI_server;
|
||||
C_MODE_END
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2000-2004 MySQL AB
|
||||
# Copyright (C) 2000-2004 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of version 2 GNU General Public License as
|
||||
@ -21,7 +21,9 @@
|
||||
# This file is public domain and comes with NO WARRANTY of any kind
|
||||
|
||||
target = libmysqlclient.la
|
||||
target_defs = -DMYSQL_CLIENT_NO_THREADS -DDONT_USE_RAID @LIB_EXTRA_CCFLAGS@
|
||||
target_defs = -DMYSQL_CLIENT_NO_THREADS -DDONT_USE_RAID \
|
||||
-DDISABLE_MYSQL_THREAD_H @LIB_EXTRA_CCFLAGS@
|
||||
|
||||
LIBS = @CLIENT_LIBS@
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
|
||||
$(openssl_includes) @ZLIB_INCLUDES@
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2000-2004 MySQL AB
|
||||
# Copyright (C) 2000-2004 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of version 2 GNU General Public License as
|
||||
@ -68,7 +68,8 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
|
||||
mf_iocache2.lo my_seek.lo my_sleep.lo \
|
||||
my_pread.lo mf_cache.lo md5.lo sha1.lo \
|
||||
my_getopt.lo my_gethostbyname.lo my_port.lo \
|
||||
my_rename.lo my_chsize.lo my_sync.lo my_getsystime.lo
|
||||
my_rename.lo my_chsize.lo my_sync.lo \
|
||||
my_getsystime.lo my_symlink2.lo mf_same.lo
|
||||
sqlobjects = net.lo
|
||||
sql_cmn_objects = pack.lo client.lo my_time.lo
|
||||
|
||||
|
@ -111,3 +111,31 @@ my_bool NEAR my_disable_async_io=0;
|
||||
my_bool NEAR my_disable_flush_key_blocks=0;
|
||||
my_bool NEAR my_disable_symlinks=0;
|
||||
my_bool NEAR mysys_uses_curses=0;
|
||||
|
||||
/*
|
||||
Note that PSI_hook and PSI_server are unconditionally
|
||||
(no ifdef HAVE_PSI_INTERFACE) defined.
|
||||
This is to ensure binary compatibility between the server and plugins,
|
||||
in the case when:
|
||||
- the server is not compiled with HAVE_PSI_INTERFACE
|
||||
- a plugin is compiled with HAVE_PSI_INTERFACE
|
||||
See the doxygen documentation for the performance schema.
|
||||
*/
|
||||
|
||||
/**
|
||||
Hook for the instrumentation interface.
|
||||
Code implementing the instrumentation interface should register here.
|
||||
*/
|
||||
struct PSI_bootstrap *PSI_hook= NULL;
|
||||
|
||||
/**
|
||||
Instance of the instrumentation interface for the MySQL server.
|
||||
@todo This is currently a global variable, which is handy when
|
||||
compiling instrumented code that is bundled with the server.
|
||||
When dynamic plugin are truly supported, this variable will need
|
||||
to be replaced by a macro, so that each XYZ plugin can have it's own
|
||||
xyz_psi_server variable, obtained from PSI_bootstrap::get_interface()
|
||||
with the version used at compile time for plugin XYZ.
|
||||
*/
|
||||
PSI *PSI_server= NULL;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000 MySQL AB
|
||||
/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -63,8 +63,8 @@ static unsigned int __stdcall pthread_start(void *p)
|
||||
}
|
||||
|
||||
|
||||
int pthread_create(pthread_t *thread_id, pthread_attr_t *attr,
|
||||
pthread_handler func, void *param)
|
||||
int pthread_create(pthread_t *thread_id, const pthread_attr_t *attr,
|
||||
pthread_handler func, void *param)
|
||||
{
|
||||
uintptr_t handle;
|
||||
struct thread_start_parameter *par;
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2000-2006 MySQL AB
|
||||
# Copyright (C) 2000-2006 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -15,7 +15,16 @@
|
||||
|
||||
# This file is public domain and comes with NO WARRANTY of any kind
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
|
||||
#
|
||||
# Note that the string library is built with #define THREAD,
|
||||
# which by default cause all the thread related code (my_pthread.h)
|
||||
# and therefore the associated instrumentation (mysql/psi/mysql_thread.h)
|
||||
# to be used.
|
||||
# Since the string code itself is not instrumented, we use
|
||||
# #define DISABLE_MYSQL_THREAD_H here to avoid unneeded dependencies.
|
||||
#
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -DDISABLE_MYSQL_THREAD_H
|
||||
pkglib_LIBRARIES = libmystrings.a
|
||||
|
||||
# Exact one of ASSEMBLER_X
|
||||
|
Loading…
x
Reference in New Issue
Block a user