Ticket #5173: 5173_pthread.patch

File 5173_pthread.patch, 4.0 KB (added by viboes, 11 years ago)

patch tested in pthread platform

  • detail/config.hpp

     
    2626#define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
    2727#endif
    2828
     29//#if ! defined BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID
     30//#define BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
     31//#endif
     32
    2933// Default version is 1
    3034#if !defined BOOST_THREAD_VERSION
    3135#define BOOST_THREAD_VERSION 1
  • detail/thread.hpp

     
    649649        std::size_t
    650650        hash_value(const thread::id &v)
    651651        {
     652#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
     653          return hash_value(v.thread_data);
     654#else
    652655          return hash_value(v.thread_data.get());
     656#endif
    653657        }
    654658
    655         detail::thread_data_ptr thread_data;
     659#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
     660        typedef thread::native_handle_type data;
     661#else
     662        typedef detail::thread_data_ptr data;
     663#endif
     664        data thread_data;
    656665
    657         id(detail::thread_data_ptr thread_data_):
     666        id(data thread_data_):
    658667            thread_data(thread_data_)
    659668        {}
    660669        friend class thread;
    661670        friend id BOOST_THREAD_DECL this_thread::get_id() BOOST_NOEXCEPT;
    662671    public:
    663672        id() BOOST_NOEXCEPT:
    664             thread_data()
     673#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
     674#if defined(BOOST_THREAD_PLATFORM_WIN32)
     675        thread_data(detail::win32::invalid_handle_value)
     676#else
     677        thread_data(0)
     678#endif
     679#else
     680        thread_data()
     681#endif
    665682        {}
    666683
    667684        id(const id& other) BOOST_NOEXCEPT :
     
    723740        {
    724741            if(thread_data)
    725742            {
    726                 return os<<thread_data;
     743              io::ios_flags_saver  ifs( os );
     744              return os<< std::hex << thread_data;
    727745            }
    728746            else
    729747            {
  • ../../libs/thread/src/win32/thread.cpp

     
    277277
    278278    thread::id thread::get_id() const BOOST_NOEXCEPT
    279279    {
     280    #if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
     281        return thread::id((get_thread_info)()->handle_manager.handle());
     282    #else
    280283        return thread::id((get_thread_info)());
     284    #endif
    281285    }
    282286
    283287    bool thread::joinable() const BOOST_NOEXCEPT
     
    537541
    538542        thread::id get_id() BOOST_NOEXCEPT
    539543        {
     544        #if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
     545            return detail::win32::GetCurrentThread();
     546        #else
    540547            return thread::id(get_or_make_current_thread_data());
     548        #endif
    541549        }
    542550
    543551        void interruption_point()
  • ../../libs/thread/src/pthread/thread.cpp

     
    483483
    484484    thread::id thread::get_id() const BOOST_NOEXCEPT
    485485    {
     486    #if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
     487        //return local_thread_info->thread_handle;
     488        return native_handle();
     489    #else
    486490        detail::thread_data_ptr const local_thread_info=(get_thread_info)();
    487491        if(local_thread_info)
    488492        {
     
    490494        }
    491495        else
    492496        {
    493             return id();
     497                return id();
    494498        }
     499    #endif
    495500    }
    496501
    497502    void thread::interrupt()
     
    543548    {
    544549        thread::id get_id() BOOST_NOEXCEPT
    545550        {
     551        #if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
     552             return pthread_self();
     553        #else
    546554            boost::detail::thread_data_base* const thread_info=get_or_make_current_thread_data();
    547555            return thread::id(thread_info?thread_info->shared_from_this():detail::thread_data_ptr());
     556        #endif
    548557        }
    549558
    550559        void interruption_point()