Ticket #12773: win32_shared_mutex_punning.patch

File win32_shared_mutex_punning.patch, 1.2 KB (added by Alexandre Pereira Nunes <alexandre.nunes@…>, 6 years ago)

Newer patch, uses type punning union.

  • boost/thread/win32/shared_mutex.hpp

    diff -pru include/boost/thread/win32/shared_mutex.hpp /mnt/misc/win64/mingw64-x-boost/boost_1_63_0/boost/thread/win32/shared_mutex.hpp
    a b namespace boost  
    2727    class shared_mutex
    2828    {
    2929    private:
    30         struct state_data
     30        union state_data
    3131        {
    32             unsigned shared_count:11,
    33                 shared_waiting:11,
    34                 exclusive:1,
    35                 upgrade:1,
    36                 exclusive_waiting:7,
    37                 exclusive_waiting_blocked:1;
    38 
     32            struct {
     33                unsigned shared_count:11,
     34                    shared_waiting:11,
     35                    exclusive:1,
     36                    upgrade:1,
     37                    exclusive_waiting:7,
     38                    exclusive_waiting_blocked:1;
     39            };
     40            long sd_alias;
    3941            friend bool operator==(state_data const& lhs,state_data const& rhs)
    4042            {
    41                 return *reinterpret_cast<unsigned const*>(&lhs)==*reinterpret_cast<unsigned const*>(&rhs);
     43                return lhs.sd_alias == rhs.sd_alias;
    4244            }
    4345        };
    4446