From: khizmax Date: Thu, 23 Feb 2017 08:23:10 +0000 (+0300) Subject: [urcu] Moved signal handler implementation to .cpp file X-Git-Tag: v2.3.0~164 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=commitdiff_plain;h=56307dee126d0182380b9d5190258e835dde4ebd [urcu] Moved signal handler implementation to .cpp file --- diff --git a/cds/threading/details/_common.h b/cds/threading/details/_common.h index 69b73f1c..f8f05996 100644 --- a/cds/threading/details/_common.h +++ b/cds/threading/details/_common.h @@ -141,9 +141,6 @@ namespace cds { //@endcond - //cds::gc::HP::thread_gc_impl * m_hpManager ; ///< Michael's Hazard Pointer GC thread-specific data - //cds::gc::DHP::thread_gc_impl * m_dhpManager ; ///< Dynamic Hazard Pointer GC thread-specific data - size_t m_nFakeProcessorNumber ; ///< fake "current processor" number //@cond diff --git a/cds/urcu/details/sh.h b/cds/urcu/details/sh.h index 682c3ee9..6de2b70d 100644 --- a/cds/urcu/details/sh.h +++ b/cds/urcu/details/sh.h @@ -111,7 +111,6 @@ namespace cds { namespace urcu { namespace details { sigact.sa_sigaction = signal_handler; sigact.sa_flags = SA_SIGINFO; sigemptyset( &sigact.sa_mask ); - //sigaddset( &sigact.sa_mask, m_nSigNo ); sigaction( m_nSigNo, &sigact, nullptr ); sigaddset( &sigact.sa_mask, m_nSigNo ); @@ -122,17 +121,6 @@ namespace cds { namespace urcu { namespace details { inline void sh_singleton::clear_signal_handler() {} - template - void sh_singleton::signal_handler( int /*signo*/, siginfo_t * /*sigInfo*/, void * /*context*/ ) - { - thread_record * pRec = cds::threading::getRCU(); - if ( pRec ) { - atomics::atomic_signal_fence( atomics::memory_order_acquire ); - pRec->m_bNeedMemBar.store( false, atomics::memory_order_relaxed ); - atomics::atomic_signal_fence( atomics::memory_order_release ); - } - } - template inline void sh_singleton::raise_signal( cds::OS::ThreadId tid ) { diff --git a/cds/urcu/details/sh_decl.h b/cds/urcu/details/sh_decl.h index 0c54e779..f0fe6ad3 100644 --- a/cds/urcu/details/sh_decl.h +++ b/cds/urcu/details/sh_decl.h @@ -85,6 +85,7 @@ namespace cds { namespace urcu { namespace details { public: sh_thread_gc(); ~sh_thread_gc(); + public: static void access_lock(); static void access_unlock(); @@ -132,9 +133,9 @@ namespace cds { namespace urcu { namespace details { typedef sh_singleton_instance< rcu_tag > rcu_instance; protected: - atomics::atomic m_nGlobalControl; - thread_list< rcu_tag > m_ThreadList; - int const m_nSigNo; + atomics::atomic m_nGlobalControl; + thread_list< rcu_tag > m_ThreadList; + int const m_nSigNo; protected: sh_singleton( int nSignal ) diff --git a/src/urcu_sh.cpp b/src/urcu_sh.cpp index 368008f9..ddd919d4 100644 --- a/src/urcu_sh.cpp +++ b/src/urcu_sh.cpp @@ -36,6 +36,29 @@ namespace cds { namespace urcu { namespace details { template<> CDS_EXPORT_API singleton_vtbl * sh_singleton_instance< signal_buffered_tag >::s_pRCU = nullptr; template<> CDS_EXPORT_API singleton_vtbl * sh_singleton_instance< signal_threaded_tag >::s_pRCU = nullptr; + template <> + void sh_singleton::signal_handler( int /*signo*/, siginfo_t * /*sigInfo*/, void * /*context*/ ) + { + thread_record * pRec = cds::threading::getRCU(); + if ( pRec ) { + atomics::atomic_signal_fence( atomics::memory_order_acquire ); + pRec->m_bNeedMemBar.store( false, atomics::memory_order_relaxed ); + atomics::atomic_signal_fence( atomics::memory_order_release ); + } + } + + template <> + void sh_singleton::signal_handler( int /*signo*/, siginfo_t * /*sigInfo*/, void * /*context*/ ) + { + thread_record * pRec = cds::threading::getRCU(); + if ( pRec ) { + atomics::atomic_signal_fence( atomics::memory_order_acquire ); + pRec->m_bNeedMemBar.store( false, atomics::memory_order_relaxed ); + atomics::atomic_signal_fence( atomics::memory_order_release ); + } + } + + }}} // namespace cds::urcu::details #endif //#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED