Hi!
knielsen == knielsen kniel...@knielsen-hq.org writes:
knielsen #At lp:maria
knielsen 2702 kniel...@knielsen-hq.org2009-06-09
knielsen XtraDB after-merge fixes.
knielsen === modified file 'mysys/thr_mutex.c'
knielsen --- a/mysys/thr_mutex.c 2009-02-19 09:01:25 +
knielsen +++ b/mysys/thr_mutex.c 2009-06-09 15:08:46 +
knielsen @@ -149,6 +149,35 @@ static inline void remove_from_active_li
knielsenmp-prev= mp-next= 0;
knielsen }
knielsen +/*
knielsen + We initialise the hashes for deadlock detection lazily.
knielsen + This greatly helps with performance when lots of mutexes are
initiased but
knielsen + only a few of them are actually used (eg. XtraDB).
knielsen +*/
knielsen +static int safe_mutex_lazy_init_deadlock_detection(safe_mutex_t *mp)
knielsen +{
knielsen + if (!my_multi_malloc(MY_FAE | MY_WME,
knielsen + mp-locked_mutex, sizeof(*mp-locked_mutex),
knielsen + mp-used_mutex, sizeof(*mp-used_mutex),
NullS))
knielsen + {
Add:
/* Disable deadlock handling for this mutex */
mp-flags|= MYF_NO_DEADLOCK_DETECTION;
knielsen +return 1; /* Error */
knielsen + }
knielsen +
knielsen + pthread_mutex_lock(THR_LOCK_mutex);
knielsen + mp-id= ++safe_mutex_id;
knielsen + pthread_mutex_unlock(THR_LOCK_mutex);
knielsen + hash_init(mp-locked_mutex, my_charset_bin,
knielsen +1000,
knielsen +offsetof(safe_mutex_deadlock_t, id),
knielsen +sizeof(mp-id),
knielsen +0, 0, HASH_UNIQUE);
knielsen + hash_init(mp-used_mutex, my_charset_bin,
knielsen +1000,
knielsen +offsetof(safe_mutex_t, id),
knielsen +sizeof(mp-id),
knielsen +0, 0, HASH_UNIQUE);
knielsen + return 0;
knielsen +}
knielsen int safe_mutex_init(safe_mutex_t *mp,
knielsen const pthread_mutexattr_t *attr
__attribute__((unused)),
knielsen @@ -167,35 +196,8 @@ int safe_mutex_init(safe_mutex_t *mp,
knielsenmp-line= line;
knielsen/* Skip the very common '' prefix from the autogenerated name */
knielsenmp-name= name[0] == '' ? name + 1 : name;
knielsen + /* Deadlock detection is initialised only lazily, on first use. */
knielsen - if (safe_mutex_deadlock_detector !( my_flags
MYF_NO_DEADLOCK_DETECTION))
knielsen - {
knielsen -if (!my_multi_malloc(MY_FAE | MY_WME,
knielsen - mp-locked_mutex,
sizeof(*mp-locked_mutex),
knielsen - mp-used_mutex, sizeof(*mp-used_mutex),
NullS))
knielsen -{
knielsen - /* Disable deadlock handling for this mutex */
knielsen - my_flags|= MYF_NO_DEADLOCK_DETECTION;
knielsen -}
knielsen -else
knielsen -{
knielsen - pthread_mutex_lock(THR_LOCK_mutex);
knielsen - mp-id= ++safe_mutex_id;
knielsen - pthread_mutex_unlock(THR_LOCK_mutex);
knielsen - hash_init(mp-locked_mutex, my_charset_bin,
knielsen -1000,
knielsen -offsetof(safe_mutex_deadlock_t, id),
knielsen -sizeof(mp-id),
knielsen -0, 0, HASH_UNIQUE);
knielsen - hash_init(mp-used_mutex, my_charset_bin,
knielsen -1000,
knielsen -offsetof(safe_mutex_t, id),
knielsen -sizeof(mp-id),
knielsen -0, 0, HASH_UNIQUE);
knielsen -}
knielsen - }
knielsen - else
knielsen -my_flags|= MYF_NO_DEADLOCK_DETECTION;
You accidently removed checking of 'safe_mutex_deadlock_detector here.
Please add:
if (safe_mutex_deadlock_detector)
my_flags|= MYF_NO_DEADLOCK_DETECTION;
knielsenmp-create_flags= my_flags;
cut
knielsen === modified file 'storage/xtradb/ibuf/ibuf0ibuf.c'
knielsen --- a/storage/xtradb/ibuf/ibuf0ibuf.c 2009-03-26 06:11:11 +
knielsen +++ b/storage/xtradb/ibuf/ibuf0ibuf.c 2009-06-09 15:08:46 +
knielsen @@ -422,7 +422,12 @@ ibuf_init_at_db_start(void)
knielsen grow in size, as the references on the upper levels of the tree
can
knielsen change */
knielsen - ibuf-max_size = ut_min( buf_pool_get_curr_size() /
UNIV_PAGE_SIZE
knielsen +/* The default for ibuf_max_size is calculated from the
requested
knielsen + buffer pool size srv_buf_pool_size, not the actual size
as returned
knielsen + by buf_pool_get_curr_size(). The latter can differ from
the former
knielsen + by one page due to alignment requirements, and we do not
want a
knielsen + user-visible variable like INNODB_IBUF_MAX_SIZE to vary
at random. */
knielsen + ibuf-max_size = ut_min( srv_buf_pool_size / UNIV_PAGE_SIZE
knielsen / IBUF_POOL_SIZE_PER_MAX_SIZE, (ulint)
srv_ibuf_max_size / UNIV_PAGE_SIZE);
knielsen srv_ibuf_max_size = (long long) ibuf-max_size * UNIV_PAGE_SIZE;
Not sure if the above is correct. From MySQL 5.1:
from ../srv/srv0start.c:
if (srv_use_awe) {