• Staale Smedseng's avatar
    Bug #45058 init_available_charsets uses double checked locking · 983770aa
    Staale Smedseng authored
          
    As documented in the bug report, the double checked locking
    pattern has inherent issues, and cannot guarantee correct
    initialization.
    
    This patch replaces the logic in init_available_charsets()
    with the use of pthread_once(3). A wrapper function,
    my_pthread_once(), is introduced and is used in lieu of direct
    calls to init_available_charsets(). Related defines
    MY_PTHREAD_ONCE_* are also introduced.
    
    For the Windows platform, the implementation in lp:sysbench is
    ported. For single-thread use, a simple define calls the
    function and sets the pthread_once control variable.
    
    Charset initialization is modified to use my_pthread_once().
    983770aa
charset.c 22.7 KB