maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #06103
Re: MariaDB mutex contention
On Tue, Aug 20, 2013 at 1:09 AM, Sergei Golubchik <serg@xxxxxxxxxxx> wrote:
> Hi, Pavel!
>
> On Aug 19, Pavel Ivanov wrote:
>> No, it's not reasonable for semi-sync to lock/unlock LOCK_plugin. It's
>> plugin infrastructure that does that.
>>
>> I've actually was terrified to learn that each call into semi-sync
>> plugin is surrounded with pthread_rwlock_rdlock/pthread_rwlock_unlock
>> (which is not cheap I believe). And also for each such call it
>> "locks"/"unlocks" the semi-sync plugin. And although "locking" plugin
>> avoids locking LOCK_plugin when plugin is linked statically,
>> "unlocking" doesn't do that.
>
> Unlocking does that too, it's completely symmetrical.
> See plugin_unlock() function, it starts from
>
> /* built-in plugins don't need ref counting */
> if (!plugin_dlib(plugin))
> DBUG_VOID_RETURN;
Sure, but macro FOREACH_OBSERVER inside rpl_handler.cc doesn't use
this function. It uses plugin_unlock_list() which always locks
LOCK_plugin.
BTW, MariaDB still supports compiling semi-sync plugins dynamically,
but it seems that it doesn't do anything against unloading semi-sync
plugins in the middle of transactions. Did anyone think about this?
Pavel
Follow ups
References