Hi!
>>>>> "Jeremy" == Jeremy Zawodny <Jeremy@stripped> writes:
Jeremy> Hi Monty & others,
Jeremy> We've *finally* tracked down a mysterious MySQL problem that has been
Jeremy> affecting some of our FreeBSD/MySQL/LinuxThreads servers. It turns
Jeremy> out that FreeBSD's realpath() isn't thread-safe. The result is that
Jeremy> you can have two processes both changing the current working directory
Jeremy> (realpath() does a a chdir() behind the scenes) on a shared file
Jeremy> descriptor and tries to restore it later and leaving the file
Jeremy> descriptor in an improper state. It's a simple race condition.
This is the same thing as we have seen on BSD and Mac OS X.
Jeremy> This doesn't *seem* to affect MySQL using FreeBSD's native threads,
Jeremy> because they are not pre-emptive or SMP aware. In order to use SMP,
Jeremy> we often build MySQL with LinuxThreads. The performance is excellent
Jeremy> this way.
It's actually a bit worse than that.
MySQL opens all files relative to the current directory. If one
thread opens a file while another thread is doing realpath() then
the open may fail.
Jeremy> The attached patch (below my sig) is *our* fix. A proper patch should
Jeremy> only implement the mutex on FreeBSD and probably omit the warning that
Jeremy> we added. Given how infrequently my_realpath() is called, it's
Jeremy> probably not worth making it specific to FreeBSD/LinuxThreads--but
Jeremy> that's obviously your decision.
Jeremy> Could something appropriate be applied to at least the 4.0 and 4.1
Jeremy> trees? I'm running this patch in production on MySQL 4.0.5.
<cut>
A better option than protecting realpath with a mutex is to compile
MySQL with the -DHAVE_BROKEN_REALPATH option.
In effect this means that one MySQL will forgot symlinks to a table if
you do a REPAIR or ALTER TABLE and you can't symlink two databases to
the same database directory.
Jeremy, is the above restrictions a problem for you ?
Lenz, can you please add the above the freebds options and add a note
about this to the manual for all OS we compile with
-DHAVE_BROKEN_REALPATH.
Regards,
Monty
--
For technical support contracts, goto https://order.mysql.com/
__ ___ ___ ____ __
/ |/ /_ __/ __/ __ \/ / Mr. Michael Widenius <monty@stripped>
/ /|_/ / // /\ \/ /_/ / /__ MySQL AB, CTO
/_/ /_/\_, /___/\___\_\___/ Helsinki, Finland
<___/ www.mysql.com