| Bug #87402 | Redundant check in ut_rnd_gen_ulint() | ||
|---|---|---|---|
| Submitted: | 11 Aug 2017 15:59 | Modified: | 14 Aug 2017 9:58 |
| Reporter: | Alexey Kopytov | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: InnoDB storage engine | Severity: | S5 (Performance) |
| Version: | 8.0.2 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[14 Aug 2017 9:58]
MySQL Verification Team
Hello Alexey, Thank you for your feedback! Verifying based on my internal discussion with developer. Thanks, Umesh

Description: In 8.0.2 my_thread_local* variables have been replaced with C++11 thread-local storage. One piece of code which is now redundant due to that change is the following part of ut_rnd_gen_ulint(): ulint rnd = ut_rnd_ulint_counter; if (rnd == 0) { rnd = 65654363; } The check above was only required because the combination of my_thread_local_key, my_set_thread_local() and my_get_thread_local() essentially emulated thread-local storage and did not allow automatic initialization of thread-local variables. That check on a critical code path can be avoided if ut_rnd_ulint_counter is initialized to 65654363 rather than zero in ut0rnd.cc How to repeat: Code analysis of ut_rnd_gen_ulint() and ut_rnd_ulint_counter initialization. Suggested fix: See above.