[MDEV-15295] Type mismatch for srv_fatal_semaphore_wait_threshold Created: 2018-02-13  Updated: 2020-04-16  Resolved: 2020-04-16

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - InnoDB, Storage Engine - XtraDB
Affects Version/s: 10.1.2, 10.2.0, 10.3.0
Fix Version/s: 10.4.2, 10.5.0

Type: Bug Priority: Major
Reporter: Marko Mäkelä Assignee: Marko Mäkelä
Resolution: Fixed Votes: 0
Labels: regression
Environment:

Windows 64-bit


Issue Links:
Problem/Incident
is caused by MDEV-7108 Made long semaphore wait timeout conf... Closed

 Description   

MDEV-7108 changed the type of the variable srv_fatal_semaphore_wait_threshold from ulint to ulong but failed to adjust the assignments accordingly.
In MariaDB 10.2, some wrong code reads like this:

			my_atomic_addlint(
				&srv_fatal_semaphore_wait_threshold,
				SRV_SEMAPHORE_WAIT_EXTENSION);

In MariaDB 10.1, it reads like this:

			os_increment_counter_by_amount(
				server_mutex,
                                srv_fatal_semaphore_wait_threshold,
				SRV_SEMAPHORE_WAIT_EXTENSION);

Both of these forms expect the data type to be ulint.

As far as I understand, on most platforms sizeof(ulong)==sizeof(ulint) would hold. Most notably, the sizes are different on 64-bit WIndows (4 and 8 bytes).

The problem was found by wlad by compiling 10.3 cmake -DWITH_ASAN and running tests on Windows.



 Comments   
Comment by Marko Mäkelä [ 2018-02-13 ]

thiru, please fix this in 10.1. Maybe we can simply make the variable uint and adjust the primitives accordingly.

Comment by Marko Mäkelä [ 2020-04-16 ]

It looks like the type mismatch was addressed in MDEV-17441 (removing the atomic operations in question, and introducing Atomic_counter<uint32_t> btr_validate_index_running.

Generated at Thu Feb 08 08:20:11 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.