mariadb/mysys
Jon Olav Hauglid 1405f019e7 Fix for bug #48538 "Assertion in thr_lock() on LOAD DATA CONCURRENT
INFILE".

Attempts to execute an INSERT statement for a MEMORY table which invoked
a trigger or called a stored function which tried to perform LOW_PRIORITY
update on the table being inserted into, resulted in debug servers aborting
due to an assertion failure. On non-debug servers such INSERTs failed with
"Can't update table t1 in stored function/trigger because it is already used
by statement which invoked this stored function/trigger" as expected.

The problem was that in the above scenario TL_WRITE_CONCURRENT_INSERT
is converted to TL_WRITE inside the thr_lock() function since the MEMORY
engine does not support concurrent inserts. This triggered an assertion
which assumed that for the same table, one thread always requests locks with
higher thr_lock_type value first. When TL_WRITE_CONCURRENT_INSERT is
upgraded to TL_WRITE after the locks have been sorted, this is no longer true.
In this case, TL_WRITE was requested after acquiring a TL_WRITE_LOW_PRIORITY
lock on the table, triggering the assert.

This fix solves the problem by adjusting this assert to take this
scenario into account.

An alternative approach to change handler::store_locks() methods for all engines
which do not support concurrent inserts in such way that
TL_WRITE_CONCURRENT_INSERT is upgraded to TL_WRITE there instead, 
was considered too intrusive.

Commit on behalf of Dmitry Lenev.


mysql-test/r/lock.result:
  Added simplified test for bug #48538 "Assertion in thr_lock() on LOAD
  DATA CONCURRENT INFILE".
mysql-test/t/lock.test:
  Added simplified test for bug #48538 "Assertion in thr_lock() on LOAD
  DATA CONCURRENT INFILE".
mysys/thr_lock.c:
  Adjusted assertion to account for situation when
  TL_WRITE_CONCURRENT_INSERT is converted to TL_WRITE inside of the
  thr_lock() function because the engine of the table being locked 
  does not support concurrent inserts.
  This scenario breaks assumption that for the same table one thread
  always requests locks with higher thr_lock_type value first, since
  TL_WRITE on the table (converted from TL_WRITE_CONCURRENT_INSERT)
  can be requested after acquiring a TL_WRITE_LOW_PRIORITY lock on the table.
  Note that it is still safe to grant a new lock without extra checks and
  waiting in such situation since TL_WRITE has the same compatibility
  rules as TL_WRITE_LOW_PRIORITY (their only difference is priority).
2010-01-08 11:26:32 +01:00
..
.cvsignore
array.c Fix for a few assorted compiler warnings. 2009-08-28 12:06:59 -03:00
base64.c fixed compilation warnings. addendum to the fix for bug 29125 2009-03-20 16:27:53 +02:00
ChangeLog
charset-def.c Bsckporting WL#3764 Sinhala Collation 2009-10-06 15:34:49 +05:00
charset.c Bug#47756 Setting 2byte collation ID with 'set names' crashes the server 2009-12-07 16:11:53 +04:00
checksum.c Bug#29125 Windows Server X64: so many compiler warnings 2009-02-13 11:41:47 -05:00
CMakeLists.txt WL#2373 Use cycle counter for timing 2009-11-24 16:36:31 -07:00
default.c merging. 2009-11-17 15:27:40 +04:00
default_modify.c This is the downport of 2009-09-11 22:26:35 +02:00
errors.c Backport of: 2009-11-24 16:54:59 +03:00
hash.c Backport of: 2009-11-24 16:54:59 +03:00
lf_alloc-pin.c WL#3230 concurrent hash 2009-11-17 19:31:40 -07:00
lf_dynarray.c WL#3230 concurrent hash 2009-11-17 19:31:40 -07:00
lf_hash.c WL#3230 concurrent hash 2009-11-17 19:31:40 -07:00
list.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
make-ccc
make-conf.c
Makefile.am WL#2373 Use cycle counter for timing 2009-11-24 16:36:31 -07:00
md5.c Bug #42434: license of mysys MD5 implementation is not GPL-compatible 2009-03-09 20:57:03 +02:00
mf_arr_appstr.c Bug #20748: Configuration files should not be read more than once 2007-11-07 15:23:50 -07:00
mf_brkhant.c
mf_cache.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
mf_dirname.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
mf_fn_ext.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
mf_format.c BUG#43949 Initialization of slave produces a warning message in Valgrind 2009-04-19 02:21:33 +01:00
mf_getdate.c Merge from 5.0-bugteam 2009-05-13 08:48:00 -07:00
mf_iocache.c Manual merge. 2009-09-02 09:12:18 -03:00
mf_iocache2.c Backport of: 2009-11-24 16:54:59 +03:00
mf_keycache.c Merge from mysql-5.1. 2009-10-19 17:28:31 +04:00
mf_keycaches.c Backport of: 2009-10-14 20:37:38 +04:00
mf_loadpath.c Backport of: 2009-11-24 16:54:59 +03:00
mf_pack.c Merge from 5.0 for 43414 2009-08-28 18:21:54 +02:00
mf_path.c Backport of: 2009-11-24 16:54:59 +03:00
mf_qsort.c Fix for bug #31207: Test "join_nested" shows different strategy on IA64 2007-10-17 20:08:58 +04:00
mf_qsort2.c
mf_radix.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
mf_same.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
mf_sort.c Merge polly.(none):/home/kaa/src/maint/mysql-5.0-maint 2007-10-18 14:32:43 +04:00
mf_soundex.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
mf_tempdir.c Bug#29125 Windows Server X64: so many compiler warnings 2009-02-13 11:41:47 -05:00
mf_tempfile.c Moved a lot of old bug fixes and safe cleanups from Maria 5.1 tree to 5.1 2007-10-11 18:07:40 +03:00
mf_unixpath.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
mf_util.c
mf_wcomp.c
mf_wfile.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
mulalloc.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
my_access.c Merge mysql.com:/home/kent/bk/main/mysql-5.0 2006-12-23 20:20:40 +01:00
my_aes.c my_strtoll10-x86.s: 2006-12-31 01:02:27 +01:00
my_alarm.c
my_alloc.c Backport of Bug#15192 to mysql-next-mr 2009-11-10 18:31:28 -02:00
my_append.c Backport of: 2009-11-24 16:54:59 +03:00
my_atomic.c WL#2595 kernel-independent atomic operations 2009-11-17 17:11:32 -07:00
my_bit.c Moved a lot of old bug fixes and safe cleanups from Maria 5.1 tree to 5.1 2007-10-11 18:07:40 +03:00
my_bitmap.c Moved a lot of old bug fixes and safe cleanups from Maria 5.1 tree to 5.1 2007-10-11 18:07:40 +03:00
my_chsize.c This is the downport of 2009-09-11 22:26:35 +02:00
my_clock.c Backport of: 2009-11-24 16:54:59 +03:00
my_compress.c Bug#29125 Windows Server X64: so many compiler warnings 2009-02-13 11:41:47 -05:00
my_conio.c Bug#29125 Windows Server X64: so many compiler warnings 2009-02-13 11:41:47 -05:00
my_copy.c Backport of: 2009-11-24 16:54:59 +03:00
my_crc32.c
my_create.c This is the downport of 2009-09-11 22:26:35 +02:00
my_delete.c Manual resolving for the following files 2009-12-01 21:07:18 +02:00
my_div.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
my_dup.c This is the downport of 2009-09-11 22:26:35 +02:00
my_error.c WL#4903 Plugin Service API part I 2009-11-02 21:05:42 +01:00
my_file.c This is the downport of 2009-09-11 22:26:35 +02:00
my_fopen.c This is the downport of 2009-09-11 22:26:35 +02:00
my_fstream.c Backport of: 2009-11-24 16:54:59 +03:00
my_gethostbyname.c Merge mysql.com:/home/kent/bk/main/mysql-5.0 2006-12-31 01:32:21 +01:00
my_gethwaddr.c fix compile error. definition of VOID in trunk still conflicts with windows headers. that was fixed in 6.0 2009-09-13 19:38:06 +02:00
my_getncpus.c WL#2595 kernel-independent atomic operations 2009-11-17 17:11:32 -07:00
my_getopt.c merging from 5.1 to rep+2 starting at gca(5.1, next-mr) == build@mysql.com-20091104182209-iui387z35159aoyw 2009-11-30 14:34:39 +02:00
my_getpagesize.c
my_getsystime.c Reverted wrong patch, fix for Windows 32bit build. 2008-02-26 18:44:04 +02:00
my_getwd.c Backport of: 2009-11-24 16:54:59 +03:00
my_handler.c Fixed problem with non-synchronous error lists 2008-03-28 18:45:03 +02:00
my_handler_errors.h WL#5016: Fix header file include guards 2009-09-23 23:32:31 +02:00
my_init.c Backport of the patch 2009-09-30 03:39:37 +02:00
my_largepage.c Merge from mysql-next-mr. 2009-10-23 15:22:21 +04:00
my_lib.c Backport of: 2009-11-24 16:54:59 +03:00
my_libwrap.c
my_lock.c This is the downport of 2009-09-11 22:26:35 +02:00
my_lockmem.c Backport of: 2009-11-24 16:54:59 +03:00
my_malloc.c Backport of my_malloc() changes from 5.1 to make it 64-bit safe on Unix platforms. 2007-08-29 19:20:18 +04:00
my_memmem.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
my_messnc.c WL#2110 (SIGNAL) 2009-09-10 03:18:29 -06:00
my_mkdir.c Merge mysql.com:/home/kent/bk/main/mysql-5.0 2006-12-23 20:20:40 +01:00
my_mmap.c This is the downport of 2009-09-11 22:26:35 +02:00
my_net.c Merge mysql.com:/home/kent/bk/main/mysql-5.0 2006-12-23 20:20:40 +01:00
my_netware.c
my_new.cc Bug#43461: invalid comparison with string literal in default.c 2009-03-19 17:20:15 -03:00
my_once.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
my_open.c This is the downport of 2009-09-11 22:26:35 +02:00
my_port.c my_strtoll10-x86.s: 2006-12-31 01:02:27 +01:00
my_pread.c This is the downport of 2009-09-11 22:26:35 +02:00
my_pthread.c Backport of: 2009-11-24 16:54:59 +03:00
my_quick.c This is the downport of 2009-09-11 22:26:35 +02:00
my_rdtsc.c WL#2373 Use cycle counter for timing 2009-11-24 16:36:31 -07:00
my_read.c This is the downport of 2009-09-11 22:26:35 +02:00
my_realloc.c Moved a lot of old bug fixes and safe cleanups from Maria 5.1 tree to 5.1 2007-10-11 18:07:40 +03:00
my_redel.c Backport of: 2009-11-24 16:54:59 +03:00
my_rename.c Moved a lot of old bug fixes and safe cleanups from Maria 5.1 tree to 5.1 2007-10-11 18:07:40 +03:00
my_seek.c This is the downport of 2009-09-11 22:26:35 +02:00
my_sleep.c Merge mysql.com:/home/kent/bk/main/mysql-5.0 2006-12-23 20:20:40 +01:00
my_static.c Merge next-mr -> next-4284. 2009-12-15 21:45:22 +03:00
my_static.h WL#5016: Fix header file include guards 2009-09-23 23:32:31 +02:00
my_symlink.c Bug#39102 valgrind build does not compile in realpath, which make DATA/INDEX DIR fail 2008-10-27 19:25:11 +04:00
my_symlink2.c Merge mysql.com:/home/svoj/devel/mysql/BUG32111/mysql-5.0-engines 2007-11-12 15:26:37 +04:00
my_sync.c This is the downport of 2009-09-11 22:26:35 +02:00
my_thr_init.c WL#3230 concurrent hash 2009-11-17 19:31:40 -07:00
my_timer_cycles.il WL#2373 Use cycle counter for timing 2009-11-24 16:36:31 -07:00
my_vle.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
my_wincond.c A follow up for the fix for Bug#35164 (remove priorities on Windows). 2009-11-23 20:08:37 +03:00
my_windac.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
my_winerr.c This is the downport of 2009-09-11 22:26:35 +02:00
my_winfile.c backport of 2009-09-30 22:10:22 +02:00
my_winthread.c WL#2360 Performance schema 2009-11-30 17:49:15 -07:00
my_write.c This is the downport of 2009-09-11 22:26:35 +02:00
mysys_priv.h WL#2360 Performance schema 2009-12-04 18:26:15 -07:00
ptr_cmp.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
queues.c Fix for server bug experienced in Maria (wrong "Truncated incorrect <var_name> 2008-02-18 23:29:39 +01:00
rijndael.c my_strtoll10-x86.s: 2006-12-31 01:02:27 +01:00
safemalloc.c Bug#43932 myisam index corruption with large index and large 2009-04-29 13:51:10 +02:00
sha1.c Merge bk-internal.mysql.com:/home/bk/mysql-5.0 2007-01-22 14:04:40 +02:00
stacktrace.c Backport of: 2009-11-24 16:54:59 +03:00
string.c Bug#29125 Windows Server X64: so many compiler warnings 2009-02-13 11:41:47 -05:00
test_charset.c Fix doxygen warnings. 2007-08-15 17:43:08 +04:00
test_dir.c Merge mysql.com:/home/kent/bk/main/mysql-5.0 2006-12-23 20:20:40 +01:00
test_fn.c
test_xml.c
testhash.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
thr_alarm.c Backport of: 2009-11-24 16:54:59 +03:00
thr_lock.c Fix for bug #48538 "Assertion in thr_lock() on LOAD DATA CONCURRENT 2010-01-08 11:26:32 +01:00
thr_mutex.c Bug#38941: fast mutexes in MySQL 5.1 have mutex contention when calling random() 2008-10-15 19:21:00 -03:00
thr_rwlock.c
tree.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
trie.c WL#3817: Simplify string / memory area types and make things more consistent (first part) 2007-05-10 12:59:39 +03:00
typelib.c Bug#46586: When using the plugin interface the type "set" for options caused a crash. 2009-10-27 06:16:02 -07:00