summaryrefslogtreecommitdiff
path: root/mysys
Commit message (Collapse)AuthorAgeFilesLines
* fixed compilation warnings. addendum to the fix for bug 29125Georgi Kodinov2009-03-201-1/+1
|
* Fixed a prototype to match the actual function signature (addendum to theGeorgi Kodinov2009-03-201-1/+1
| | | | | fix for 29125).
* auto-mergeIgnacio Galarza2009-03-191-4/+9
|\
| * Merge bugteam and fix for 42675.Chad MILLER2009-03-181-4/+9
| |\
| | * Fix indentation. tab -> spacesChad MILLER2009-03-171-1/+1
| | |
| | * Bug#42675: Dangling pointer leads to a client crash (mysys/my_error.c \Chad MILLER2009-03-171-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | patch enclosed) One call to my_error_unregister_all() would free pointers, but leave one pointer to just-freed memory still assigned. That's the bug. Subsequent calls of this function would try to follow pointers into deallocated, garbage memory and almost certainly SEGV. Now, after freeing a linked list, unset the initial pointer.
* | | auto-mergeIgnacio Galarza2009-03-192-16/+55
|\ \ \ | |/ /
| * | 36446: fix Windows warningTatiana A. Nurnberg2009-03-171-1/+1
| | |
| * | manual mergeTatiana A. Nurnberg2009-03-161-14/+51
| |\ \ | | |/
| | * Manual merge of patch for bug #40552 into the team tree.Alexey Kopytov2009-03-161-14/+51
| | |\ | | | | | | | | | | | | | | | | Replaced a call to load_defaults() in sql_plugin.cc with its thread-safe version.
| | | * Fix for bug #40552: Race condition around default_directories Alexey Kopytov2009-02-271-14/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | in load_defaults() load_defaults(), my_search_option_files() and my_print_default_files() utilized a global variable containing a pointer to thread local memory. This could lead to race conditions when those functions were called with high concurrency. Fixed by changing the interface of the said functions to avoid the necessity for using a global variable. Since we cannot change load_defaults() prototype for API compatibility reasons, it was renamed my_load_defaults(). Now load_defaults() is a thread-unsafe wrapper around a thread-safe version, my_load_defaults(). mysys/default.c: 1. Added a thread-safe version of load_defaults(), changed load_defaults() with the old interface to be a thread-unsafe wrapper around the thread-safe version. 2. Always use a private MEM_ROOT in my_print_default_files, don't use a global variable. sql-common/client.c: Use a thread-safe version of load_defaults().
| * | | Bug#36446: Attempt to set @@join_buffer_size to its minimum value produces ↵Tatiana A. Nurnberg2009-03-161-2/+4
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | spurious warning If a sys-var has a base and a block-size>1, and then a user-supplied value >= minimum ended up below minimum thanks to block-size alignment, we threw a warning. This meant for instance that when getting, then setting the minimum, we'd see a warning. This was needlessly confusing. (updated patch)
* | | auto-mergeIgnacio Galarza2009-03-177-328/+297
|\ \ \ | |/ /
| * | merge of bug 42434 to 5.1-bugteamGeorgi Kodinov2009-03-111-305/+262
| |\ \
| | * | Bug #42434: license of mysys MD5 implementation is not GPL-compatibleGeorgi Kodinov2009-03-091-305/+262
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Took the Xfree implementation (based on the same rewrite as the NDB one) and added it instead of the current implementation. Added a macro to make the calls to MD5 more streamlined. client/mysqlmanager-pwgen.c: Bug #42434: changed to call the macro include/my_md5.h: Bug #42434: use the Xfree implementation mysys/md5.c: Bug #42434: use the Xfree implementation sql/item_strfunc.cc: Bug #42434: changed to call the macro sql/table.cc: Bug #42434: changed to call the macro tools/mysqlmanager.c: Bug #42434: changed to call the macro
| * | | Merge BUG#22082 from 5.0-bugteam to 5.1-bugteamHe Zhenxing2009-03-064-13/+21
| |\ \ \ | | |/ /
| | * | BUG#22082 Slave hangs(holds mutex) on "disk full"He Zhenxing2009-03-064-13/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When disk is full, server may waiting for free space while writing binlog, relay-log or MyISAM tables. The server will continue after user have freed some space. But the error message printed was not quite clear about the how often the error message is printed, and there will be a delay before the server continue and user freeing space. And caused users thinking that the server was hanging forever. This patch fixed the problem by making the error messages printed more clear. The error message is split into two part, the first part will only be printed once, and the second part will be printed very 10 times. Message first part: Disk is full writing '<filename>' (Errcode: <errorno>). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space) Message second part: Retry in 60 secs, Message reprinted in 600 secs
| * | | merging.Alexey Botchkov2009-02-242-10/+14
| |\ \ \ | | |_|/ | |/| |
| | * | Bug#39289 libmysqld.a calls exit() upon error Alexey Botchkov2008-10-273-19/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Several functions (mostly in mysqld.cc) directly call exit() function in case of errors, which is not a desired behaviour expecially in the embedded-server library. Fixed by making these functions return error sign instead of exiting. per-file comments: include/my_getopt.h Bug#39289 libmysqld.a calls exit() upon error added 'error' retvalue for my_getopt_register_get_addr libmysqld/lib_sql.cc Bug#39289 libmysqld.a calls exit() upon error unireg_clear() function implemented mysys/default.c Bug#39289 libmysqld.a calls exit() upon error error returned instead of exit() call mysys/mf_tempdir.c Bug#39289 libmysqld.a calls exit() upon error free_tmpdir() - fixed so it's not produce crash on uninitialized tmpdir structure mysys/my_getopt.c Bug#39289 libmysqld.a calls exit() upon error error returned instead of exit() call sql/mysql_priv.h Bug#39289 libmysqld.a calls exit() upon error unireg_abort definition fixed for the embedded server sql/mysqld.cc Bug#39289 libmysqld.a calls exit() upon error various functions fixed error returned instead of exit() call
* | | | Bug#29125 Windows Server X64: so many compiler warningsIgnacio Galarza2009-02-1319-37/+34
|\ \ \ \ | |/ / / |/| | | | | | | | | | | | | | | | | | | - Remove bothersome warning messages. This change focuses on the warnings that are covered by the ignore file: support-files/compiler_warnings.supp. - Strings are guaranteed to be max uint in length
| * | | Bug#29125 Windows Server X64: so many compiler warningsIgnacio Galarza2009-02-106-11/+11
| | |/ | |/| | | | | | | | | | | | | - Remove bothersome warning messages. This change focuses on the warnings that are covered by the ignore file: support-files/compiler_warnings.supp. - Strings are guaranteed to be max uint in length
* | | mergingAlexey Botchkov2009-02-052-5/+8
|\ \ \
| * | | Bug#40536: SELECT is blocked by INSERT DELAYED waiting onDavi Arnaut2009-02-031-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | upgrading lock, even with low_priority_updates The problem is that there is no mechanism to control whether a delayed insert takes a high or low priority lock on a table. The solution is to modify the delayed insert thread ("handler") to take into account the global value of low_priority_updates when taking table locks. The value of low_priority_updates is retrieved when the insert delayed thread is created and will remain the same for the duration of the thread. include/thr_lock.h: Update prototype. mysql-test/r/delayed.result: Add test case result for Bug#40536 mysql-test/t/delayed.test: Add test case for Bug#40536 mysys/thr_lock.c: Add function parameter which specifies the write lock type. sql/sql_insert.cc: Take a low priority write lock if global value of low_priority_updates was ON when the thread was created.
| * | | Bug#41084 full-text index added to custom UCA collation not workingAlexander Barkov2009-02-021-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Custom UCA collations didn't set the MY_CS_STRNXFRM flag, which resulted in "prefix_search" method instead of the required "seq_search". Problem2: (not metioned in the bug report) Custom UCA collations didn't also set the MY_CS_UNICODE flag, so an attempt to compare a column with a custom UCA collation to another column with a non-Unicode character set led to the "illegal mix of collation" error. Fix: the two missing flags was added into collation initialization. Upgrade: - All fulltext indexes with custom UCA collations should be rebuilt. - Non-fulltext custom UCA indexes should likely be rebuild as well.
* | | | Bug#37995 Error message truncation in test "innodb" in embedded mode.Alexey Botchkov2009-02-053-8/+12
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | code backported from 6.0 per-file messages: include/my_global.h Remove SC_MAXWIDTH. This is unused and irrelevant nowadays. include/my_sys.h Remove errbuf declaration and unused definitions. mysys/my_error.c Remove errbuf definition and move and adjust ERRMSGSIZE. mysys/my_init.c Declare buffer on the stack and use my_snprintf. mysys/safemalloc.c Use size explicitly. It's more than enough for the message at hand. sql/sql_error.cc Use size explicitly. It's more than enough for the message at hand. sql/sql_parse.cc Declare buffer on the stack. Use my_snprintf as it will result in less stack space being used than by a system provided sprintf -- this allows us to put the buffer on the stack without causing much trouble. Also, the use of errbuff here was not thread-safe as the function can be entered concurrently from multiple threads. sql/sql_table.cc Use MYSQL_ERRMSG_SIZE. Extra space is not needed as my_snprintf will nul terminate strings. storage/myisam/ha_myisam.cc Use MYSQL_ERRMSG_SIZE. sql/share/errmsg.txt Error message truncation in test "innodb" in embedded mode filename in the error message can safely take up to 210 symbols.
* | | merge: 5.1 -> 5.1-rplLuis Soares2009-01-232-9/+13
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | conflicts: Text conflict in client/mysqltest.cc Text conflict in mysql-test/include/wait_until_connected_again.inc Text conflict in mysql-test/lib/mtr_report.pm Text conflict in mysql-test/mysql-test-run.pl Text conflict in mysql-test/r/events_bugs.result Text conflict in mysql-test/r/log_state.result Text conflict in mysql-test/r/myisam_data_pointer_size_func.result Text conflict in mysql-test/r/mysqlcheck.result Text conflict in mysql-test/r/query_cache.result Text conflict in mysql-test/r/status.result Text conflict in mysql-test/suite/binlog/r/binlog_index.result Text conflict in mysql-test/suite/binlog/r/binlog_innodb.result Text conflict in mysql-test/suite/rpl/r/rpl_packet.result Text conflict in mysql-test/suite/rpl/t/rpl_packet.test Text conflict in mysql-test/t/disabled.def Text conflict in mysql-test/t/events_bugs.test Text conflict in mysql-test/t/log_state.test Text conflict in mysql-test/t/myisam_data_pointer_size_func.test Text conflict in mysql-test/t/mysqlcheck.test Text conflict in mysql-test/t/query_cache.test Text conflict in mysql-test/t/rpl_init_slave_func.test Text conflict in mysql-test/t/status.test
| * \ \ Merge fix for bug 38364.Chad MILLER2009-01-131-3/+5
| |\ \ \
| | * | | Bug#38364: gen_lex_hash segmentation fault in debug buildChad MILLER2009-01-121-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bug#36428: MY_MUTEX_INIT_FAST is used before initialization On some thread implementations, we need a fake mutex attri- bute as a placeholder, which we define as a global variable, "my_fast_mutexattr". Well. that must be initialized before used in any mutexes, and the ordering of initializations in the API function my_init() was wrong. Now, put my_thread_global_init(), which initializes the attri- butes that mutexes require.
| * | | | Bug#31177: Server variables can't be set to their current valuesTatiana A. Nurnberg2009-01-121-6/+8
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bounds-checks and blocksize corrections were applied to user-input, but constants in the server were trusted implicitly. If these values did not actually meet the requirements, the user could not set change a variable, then set it back to the (wonky) factory default or maximum by explicitly specifying it (SET <var>=<value> vs SET <var>=DEFAULT). Now checks also apply to the server's presets. Wonky values and maxima get corrected at startup. Consequently all non-offsetted values the user sees are valid, and users can set the variable to that exact value if they so desire. mysql-test/r/read_buffer_size_basic.result: test sets out of bounds value; we now throw a warning for this. This is a side-effect: before, the maximum was higher than the value we set here. The value was corrected to block-size, the maximum was not, hence the value was smaller than the maximum in this particular case. Now that we align the maxima at startup, the value in SET is larger than the (corrected) maximum, and we see a warning in this particular case. "This means we're doing it right." mysql-test/r/read_rnd_buffer_size_basic.result: test sets out of bounds value; we now throw a warning for this. This is a side-effect: before, the maximum was higher than the value we set here. The value was corrected to block-size, the maximum was not, hence the value was smaller than the maximum in this particular case. Now that we align the maxima at startup, the value in SET is larger than the (corrected) maximum, and we see a warning in this particular case. "This means we're doing it right." mysys/my_getopt.c: Do bounds-checking at start-up time so we'll catch and correct wonky default values and upper limits. sql/mysqld.cc: If 0 is a legal value per the docs, not to mention the default, we shouldn't give 1 as the lower limit. storage/innobase/handler/ha_innodb.cc: We are setting upper bounds here. ~0L gives -1. That is NOT what we want!
* | | | merge: 5.1 -> 5.1-rplLuis Soares2009-01-081-1/+1
|\ \ \ \ | |/ / / | | | | | | | | | | | | | | | | conflicts: Text conflict in mysql-test/lib/mtr_report.pm Text conflict in mysql-test/mysql-test-run.pl
| * | | Merge main 5.1 into 5.1-buildJoerg Bruehe2008-12-104-20/+15
| |\ \ \
| * \ \ \ Merge from mysql-5.1.30-releaseunknown2008-11-271-1/+1
| |\ \ \ \
| | * | | | Added "Sun Microsystems, Inc." to copyright headers on files modifiedBuild Team2008-11-101-1/+1
| | | |_|/ | | |/| | | | | | | | | | | | | | | | | since Oct 1st
* | | | | merge 5.1 --> 5.1-rplAlfranio Correia2008-12-134-20/+15
|\ \ \ \ \ | | |_|/ / | |/| | |
| * | | | Bug#38522: 5 seconds delay when closing application using embedded serverVladislav Vaintroub2008-12-041-11/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem here is that embedded server starts handle_thread manager thread on mysql_library_init() does not stop it on mysql_library_end(). At shutdown, my_thread_global_end() waits for thread count to become 0, but since we did not stop the thread it will give up after 5 seconds. Solution is to move shutdown for handle_manager thread from kill_server() (mysqld specific) to clean_up() that is used by both embedded and mysqld. This patch also contains some refactorings - to avoid duplicate code, start_handle_manager() and stop_handle_manager() functions are introduced. Unused variables are eliminated. handle_manager does not rely on global variable abort_loop anymore to stop (abort_loop is not set for embedded). Note: Specifically on Windows and when using DBUG version of libmysqld, the complete solution requires removing obsolete code my_thread_init() from my_thread_var(). This has a side effect that a DBUG statement after my_thread_end() can cause thread counter to be incremented, and embedded will hang for some seconds. Or worse, my_thread_init() will crash if critical sections have been deleted by the global cleanup routine that runs in a different thread. This patch also fixes and revert prior changes for Bug#38293 "Libmysqld crash in mysql_library_init if language file missing". Root cause of the crash observed in Bug#38293 was bug in my_thread_init() described above client/mysql.cc: sql_protocol_typelib is not exported from libmysqld (does not make sense either) thus excluded from embedded client dbug/dbug.c: revert changes for Bug#38293 include/my_dbug.h: revert changes for Bug#38293 libmysql/libmysql.c: Removed DBUG_POP call, because when called after my_end(), will access THR_key_mysys that is already deleted. The result of pthread_get_specific is not predictable in this case and hence DBUG_POP can crash. libmysqld/examples/CMakeLists.txt: Revert changes for Bug#38293. libmysqld/lib_sql.cc: code to start handle manager is factored out into start_handle_manager() function libmysqld/libmysqld.def: Revert changes for Bug #38293 Remove excessive exports from libmysqld, export what API documents. mysys/my_thr_init.c: Remove windows-DLL-specific workaround for something (old code, no documentation for what specifically). The problem is that even after my_thread_end() is finished, DBUG statement can initiate my_thread_init(). This does not happen anywhere else and should not happen on Windows either. sql/mysql_priv.h: - new functions start_handle_manager() and stop_handle_manager() - move manager_thread_in_use variable to sql_manager.cc and made it static - remove manager_status, as it is unused sql/mysqld.cc: Code to start/stop handle_manager thread is factored out into start_handle_manager()
| * | | | mergingAlexey Botchkov2008-11-192-7/+14
| |\ \ \ \
| | * | | | Bug#38293 Libmysqld crash in mysql_library_init if language file missingAlexey Botchkov2008-11-192-7/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | That's a Win-specific error. When we create libmysqld.dll we have many libraries like mysys, dbug, strings, etc linked into that dll, so the application built upon this library shouldn't link these libraries to itself, rather use those inside the dll. Fixed by redirecting calls into the libmysqld.dll per-file comments: dbug/dbug.c Bug#38293 Libmysqld crash in mysql_library_init if language file missing fake _db_something definitions added include/my_dbug.h Bug#38293 Libmysqld crash in mysql_library_init if language file missing fake _db_something declarations added libmysqld/examples/CMakeLists.txt Bug#38293 Libmysqld crash in mysql_library_init if language file missing superfluous libraries removed from linking libmysqld/libmysqld.def Bug#38293 Libmysqld crash in mysql_library_init if language file missing set of mysys functions added to the export section
| * | | | | merge fix for 36279Vladislav Vaintroub2008-11-101-2/+0
| |\ \ \ \ \ | | |_|/ / / | |/| | | / | | | |_|/ | | |/| |
| | * | | Bug#36279 - mysql built with Visual Studio 2005 does not display Vladislav Vaintroub2008-11-101-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | japanese characters. Fix - removed obsolvete setlocale from my_init.c . In MBCS environments it caused unwanted character-to-byte translations in fputc() in client code and wrong output as result.
* | | | | merging 5.1 -> 5.1 rpl. 3 of 4 conflicts are resolved similarly to ↵Andrei Elkin2008-11-122-13/+31
|\ \ \ \ \ | |/ / / / | | | | | | | | | | | | | | | | | | | | 6.0->6.0-rpl merging. mysql_upgrade results changed due to the error messesge of mysqlcheck has changed.
| * | | | Bug#39102 valgrind build does not compile in realpath, which make DATA/INDEX ↵Alexey Botchkov2008-10-271-11/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | DIR fail #ifdef HAVE_purify removed per-file comments: mysql-test/t/partition_not_windows.test Bug#39102 valgrind build does not compile in realpath, which make DATA/INDEX DIR fail test reenabled mysys/my_symlink.c Bug#39102 valgrind build does not compile in realpath, which make DATA/INDEX DIR fail superfluous ifdef removed, comments fixed
| * | | | Bug#38941: fast mutexes in MySQL 5.1 have mutex contention when calling random()Davi Arnaut2008-10-151-2/+25
| | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem is that MySQL's 'fast' mutex implementation uses the random() routine to determine the spin delay. Unfortunately, the routine interface is not thead-safe and some implementations (eg: glibc) might use a internal lock to protect the RNG state, causing excessive locking contention if lots of threads are spinning on a MySQL's 'fast' mutex. The code was also misusing the value of the RAND_MAX macro, this macro represents the largest value that can be returned from the rand() function, not random(). The solution is to use the quite simple Park-Miller random number generator. The initial seed is set to 1 because the previously used generator wasn't being seeded -- the initial seed is 1 if srandom() is not called. Futhermore, the 'fast' mutex implementation has several shortcomings and provides no measurable performance benefit. Therefore, its use is not recommended unless it provides directly measurable results. include/my_pthread.h: Add field to keep the RNG state. mysys/thr_mutex.c: Use a palliative per-mutex rng state to determine the spin delay. The RNG is not thread-safe but jumping a few sequences in the RNG is harmless.
* | | | Merging 5.1 main into 5.1-rplMats Kindahl2008-10-232-69/+136
|\ \ \ \ | |/ / /
| * | | Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE ↵Ingo Struewing2008-10-011-68/+70
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | engine. This patch contains fixes for two problems: 1. As originally reported, the server crashed on Mac OS X when trying to access an EXAMPLE table after the EXAMPLE plugin was installed. It turned out that the dynamically loaded EXAMPLE plugin called the function hash_earch() from a Mac OS X system library, instead of hash_earch() from MySQL's mysys library. Makefile.am in storage/example does not include libmysys. So the Mac OS X linker arranged the hash_search() function to be linked to the system library when the shared object is loaded. One possible solution would be to include libmysys into the linkage of dynamic plugins. But then we must have a libmysys.so, which must be used by the server too. This could have a minimal performance impact, but foremost the change seems to bee too risky at the current state of MySQL 5.1. The selected solution is to rename MySQL's hash_search() to my_hash_search() like it has been done before with hash_insert() and hash_reset(). Since this is the third time, we need to rename a hash_*() function, I did renamed all hash_*() functions to my_hash_*(). To avoid changing a zillion calls to these functions, and announcing this to hundreds of developers, I added defines that map the old names to the new names. This change is in hash.h and hash.c. 2. The other problem was improper implementation of the handlerton-to-plugin mapping. We use a fixed-size array to hold a plugin reference for each handlerton. On every install of a handler plugin, we allocated a new slot of the array. On uninstall we did not free it. After some uninstall/install cycles the array overflowed. We did not check for overflow. One fix is to check for overflow to stop the crashes. Another fix is to free the array slot at uninstall and search for a free slot at plugin install. This change is in handler.cc. include/hash.h: Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE engine. Renamed hash_*() functions to my_hash_*(). Added defines that map old names to new names. mysys/hash.c: Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE engine. Renamed hash_*() functions to my_hash_*(). sql/handler.cc: Bug#37958 - test main.plugin crash on Mac OS X when selecting from EXAMPLE engine. Protect against a failing ha_initialize_handlerton() in ha_finalize_handlerton(). Free hton2plugin slot on uninstall of a handler plugin. Reuse freed slost of the hton2plugin array. Protect against array overrun.
| * | merge fix from 5.0-bugteamVladislav Vaintroub2008-09-161-5/+10
| |\ \ | | |/
| * | merge fix for 35987Vladislav Vaintroub2008-09-151-1/+61
| |\ \ | | |/
* | | Merge 5.1 main -> 5.1-rplHe Zhenxing2008-09-066-54/+64
|\ \ \ | |/ /
| * | merging fixesAlexey Botchkov2008-08-261-0/+8
| |\ \ | | |/
| | * merging fixAlexey Botchkov2008-08-262-1/+9
| | |\
| * | \ Merge Bug#36579 into mysql-5.1-bugteamDavi Arnaut2008-08-251-1/+1
| |\ \ \ | | | |/ | | |/|