Commit ae05b07f authored by heikki@donna.mysql.fi's avatar heikki@donna.mysql.fi

univ.i Prevent inlining of functions on HP-UX because GCC is broken there

configure.in	Prevent inlining of functions on HP-UX because GCC is broken there
trx0trx.h	Fix trx->error_info in MySQL debug version: Innobase and ha_innobase.cc saw a different size for pthread_mutex_t
trx0trx.c	Fix trx->error_info in MySQL debug version: Innobase and ha_innobase.cc saw a different size for pthread_mutex_t
ha_innobase.cc	Fix trx->error_info in MySQL debug version: Innobase and ha_innobase.cc saw a different size for pthread_mutex_t
parent ae5ee2d2
jani@janikt.pp.saunalahti.fi
heikki@donna.mysql.fi
# Process this file with autoconf to produce a configure script
AC_INIT
AC_CANONICAL_SYSTEM
AM_MAINTAINER_MODE
AM_CONFIG_HEADER(ib_config.h)
AM_INIT_AUTOMAKE(ib, 0.90)
AC_PROG_CC
AC_PROG_RANLIB
AC_PROG_INSTALL
AC_CHECK_HEADERS(aio.h)
AC_CHECK_SIZEOF(int, 4)
AC_C_INLINE
AC_C_BIGENDIAN
case "$target_os" in
hp*) AC_DEFINE(UNIV_MUST_NOT_INLINE, 1,
No inlining because gcc broken on HP-UX);;
esac
AC_OUTPUT(Makefile os/Makefile ut/Makefile btr/Makefile
buf/Makefile com/Makefile data/Makefile
......
......@@ -24,6 +24,14 @@ saving CPU time. The kernel mutex contention is increased, however. */
extern ulint trx_n_mysql_transactions;
/********************************************************************
Retrieves the error_info field from a trx. */
void*
trx_get_error_info(
/*===============*/
/* out: the error info */
trx_t* trx); /* in: trx object */
/********************************************************************
Creates and initializes a transaction object. */
......
......@@ -76,7 +76,7 @@ subdirectory of 'mysql'. */
/* the above option enables basic recovery debugging:
new allocated file pages are reset */
#if (!defined(UNIV_DEBUG) && !defined(INSIDE_HA_INNOBASE_CC))
#if (!defined(UNIV_DEBUG) && !defined(INSIDE_HA_INNOBASE_CC) && !defined(UNIV_MUST_NOT_INLINE))
/* Definition for inline version */
#ifdef __WIN__
......
......@@ -30,6 +30,17 @@ sess_t* trx_dummy_sess = NULL;
the kernel mutex */
ulint trx_n_mysql_transactions = 0;
/********************************************************************
Retrieves the error_info field from a trx. */
void*
trx_get_error_info(
/*===============*/
/* out: the error info */
trx_t* trx) /* in: trx object */
{
return(trx->error_info);
}
/********************************************************************
Creates and initializes a transaction object. */
......
......@@ -2575,10 +2575,16 @@ ha_innobase::info(
}
}
/* The trx struct in Innobase contains a pthread mutex embedded:
in the debug version of MySQL that it replaced by a 'safe mutex'
which is of a different size. We have to use a function to access
trx fields. Otherwise trx->error_info will be a random
pointer and cause a seg fault. */
if (flag & HA_STATUS_ERRKEY) {
errkey = (unsigned int) row_get_mysql_key_number_for_index(
(dict_index_t*)
prebuilt->trx->error_info);
(dict_index_t*)
trx_get_error_info(prebuilt->trx));
}
DBUG_VOID_RETURN;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment