Michael Widenius <mo...@askmonty.org> writes: > 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;
Ok, done. (It is not strictly necessary, as the caller checks the return value. The difference is if in case of out-of-memory, the malloc() will be re-tried on next access or not. It very likely doesn't matter one way or the other). > knielsen> @@ -167,35 +196,8 @@ int safe_mutex_init(safe_mutex_t *mp, > knielsen> mp->line= line; > knielsen> /* Skip the very common '&' prefix from the autogenerated name */ > knielsen> mp->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. Oops :-( Fixed, thanks for catching this! - Kristian. _______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : maria-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp