OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Private Attributes | List of all members
OpenDDS::DCPS::DcpsUpcalls Class Reference

#include <DcpsUpcalls.h>

Inheritance diagram for OpenDDS::DCPS::DcpsUpcalls:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::DcpsUpcalls:
Collaboration graph
[legend]

Public Member Functions

 DcpsUpcalls (DataReaderCallbacks_rch drr, const GUID_t &reader, const WriterAssociation &wa, bool active, DataWriterCallbacks_rch dwr)
 
int svc ()
 
void writer_done ()
 
- Public Member Functions inherited from ACE_Task_Base
 ACE_Task_Base (ACE_Thread_Manager *=0)
 
virtual ~ACE_Task_Base (void)
 
virtual int open (void *args=0)
 
virtual int close (u_long flags=0)
 
virtual int module_closed (void)
 
virtual int put (ACE_Message_Block *, ACE_Time_Value *=0)
 
virtual int activate (long flags=THR_NEW_LWP|THR_JOINABLE|THR_INHERIT_SCHED, int n_threads=1, int force_active=0, long priority=ACE_DEFAULT_THREAD_PRIORITY, int grp_id=-1, ACE_Task_Base *task=0, ACE_hthread_t thread_handles[]=0, void *stack[]=0, size_t stack_size[]=0, ACE_thread_t thread_ids[]=0, const char *thr_name[]=0)
 
virtual int wait (void)
 
virtual int suspend (void)
 
virtual int resume (void)
 
int grp_id (void) const
 
void grp_id (int)
 
ACE_Thread_Managerthr_mgr (void) const
 
void thr_mgr (ACE_Thread_Manager *)
 
int is_reader (void) const
 
int is_writer (void) const
 
size_t thr_count (void) const
 
ACE_thread_t last_thread (void) const
 
- Public Member Functions inherited from ACE_Service_Object
 ACE_Service_Object (ACE_Reactor *=0)
 
virtual ~ACE_Service_Object (void)
 
- Public Member Functions inherited from ACE_Event_Handler
virtual ~ACE_Event_Handler (void)
 
virtual ACE_HANDLE get_handle (void) const
 
virtual void set_handle (ACE_HANDLE)
 
virtual int priority (void) const
 
virtual void priority (int priority)
 
virtual int handle_input (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_output (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_exception (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_timeout (const ACE_Time_Value &current_time, const void *act=0)
 
virtual int handle_exit (ACE_Process *)
 
virtual int handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask)
 
virtual int handle_signal (int signum, siginfo_t *=0, ucontext_t *=0)
 
virtual int resume_handler (void)
 
virtual int handle_qos (ACE_HANDLE=ACE_INVALID_HANDLE)
 
virtual int handle_group_qos (ACE_HANDLE=ACE_INVALID_HANDLE)
 
virtual void reactor (ACE_Reactor *reactor)
 
virtual ACE_Reactorreactor (void) const
 
virtual ACE_Reactor_Timer_Interfacereactor_timer_interface (void) const
 
virtual Reference_Count add_reference (void)
 
virtual Reference_Count remove_reference (void)
 
Reference_Counting_Policyreference_counting_policy (void)
 
- Public Member Functions inherited from ACE_Shared_Object
 ACE_Shared_Object (void)
 
virtual ~ACE_Shared_Object (void)
 
virtual int init (int argc, ACE_TCHAR *argv[])
 
virtual int fini (void)
 
virtual int info (ACE_TCHAR **info_string, size_t length=0) const
 

Private Attributes

DataReaderCallbacks_wrch drr_
 
const GUID_treader_
 
const WriterAssociationwa_
 
bool active_
 
DataWriterCallbacks_wrch dwr_
 
bool reader_done_
 
bool writer_done_
 
ACE_Thread_Mutex mtx_
 
ConditionVariable< ACE_Thread_Mutexcnd_
 

Additional Inherited Members

- Public Types inherited from ACE_Event_Handler
typedef long Reference_Count
 
- Static Public Member Functions inherited from ACE_Task_Base
static ACE_THR_FUNC_RETURN svc_run (void *)
 
static void cleanup (void *object, void *params)
 
- Static Public Member Functions inherited from ACE_Event_Handler
static ACE_THR_FUNC_RETURN read_adapter (void *event_handler)
 
static int register_stdin_handler (ACE_Event_Handler *eh, ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr, int flags=THR_DETACHED)
 
static int remove_stdin_handler (ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr)
 
- Public Attributes inherited from ACE_Service_Object
 ACE_ALLOC_HOOK_DECLARE
 
- Public Attributes inherited from ACE_Event_Handler
 LO_PRIORITY
 
 HI_PRIORITY
 
 NULL_MASK
 
 READ_MASK
 
 WRITE_MASK
 
 EXCEPT_MASK
 
 ACCEPT_MASK
 
 CONNECT_MASK
 
 TIMER_MASK
 
 QOS_MASK
 
 GROUP_QOS_MASK
 
 SIGNAL_MASK
 
 ALL_EVENTS_MASK
 
 RWE_MASK
 
 DONT_CALL
 
 ACE_EVENT_HANDLER_NOT_RESUMED
 
 ACE_REACTOR_RESUMES_HANDLER
 
 ACE_APPLICATION_RESUMES_HANDLER
 
- Protected Types inherited from ACE_Event_Handler
typedef ACE_Atomic_Op< ACE_SYNCH_MUTEX, Reference_CountAtomic_Reference_Count
 
- Protected Member Functions inherited from ACE_Event_Handler
 ACE_Event_Handler (ACE_Reactor *=0, int priority=ACE_Event_Handler::LO_PRIORITY)
 
- Protected Attributes inherited from ACE_Task_Base
size_t thr_count_
 
ACE_Thread_Managerthr_mgr_
 
u_long flags_
 
int grp_id_
 
ACE_thread_t last_thread_id_
 
- Protected Attributes inherited from ACE_Event_Handler
Atomic_Reference_Count reference_count_
 

Detailed Description

Definition at line 24 of file DcpsUpcalls.h.

Constructor & Destructor Documentation

◆ DcpsUpcalls()

OpenDDS::DCPS::DcpsUpcalls::DcpsUpcalls ( DataReaderCallbacks_rch  drr,
const GUID_t reader,
const WriterAssociation wa,
bool  active,
DataWriterCallbacks_rch  dwr 
)

Definition at line 12 of file DcpsUpcalls.cpp.

18  : drr_(drr)
19  , reader_(reader)
20  , wa_(wa)
21  , active_(active)
22  , dwr_(dwr)
23  , reader_done_(false)
24  , writer_done_(false)
25  , cnd_(mtx_)
26 {
27 }
DataReaderCallbacks_wrch drr_
Definition: DcpsUpcalls.h:37
ACE_Thread_Mutex mtx_
Definition: DcpsUpcalls.h:43
const GUID_t & reader_
Definition: DcpsUpcalls.h:38
ConditionVariable< ACE_Thread_Mutex > cnd_
Definition: DcpsUpcalls.h:44
const WriterAssociation & wa_
Definition: DcpsUpcalls.h:39
DataWriterCallbacks_wrch dwr_
Definition: DcpsUpcalls.h:41

Member Function Documentation

◆ svc()

int OpenDDS::DCPS::DcpsUpcalls::svc ( void  )
virtual

Reimplemented from ACE_Task_Base.

Definition at line 29 of file DcpsUpcalls.cpp.

References ACE_ERROR, ACE_GUARD_RETURN, active_, cnd_, OpenDDS::DCPS::CvStatus_Error, OpenDDS::DCPS::CvStatus_NoTimeout, OpenDDS::DCPS::CvStatus_Timeout, OpenDDS::DCPS::DCPS_debug_level, drr_, LM_ERROR, OpenDDS::DCPS::WeakRcHandle< T >::lock(), mtx_, OpenDDS::DCPS::ConditionVariable< Mutex >::notify_one(), OpenDDS::DCPS::TimePoint_T< MonotonicClock >::now(), reader_, reader_done_, TheServiceParticipant, OpenDDS::DCPS::ThreadStatusManager::thread_status_interval(), OpenDDS::DCPS::ThreadStatusManager::update_thread_status(), wa_, OpenDDS::DCPS::ConditionVariable< Mutex >::wait(), OpenDDS::DCPS::ConditionVariable< Mutex >::wait_until(), and writer_done_.

30 {
31  ThreadStatusManager& thread_status_manager = TheServiceParticipant->get_thread_status_manager();
32  const TimeDuration thread_status_interval = thread_status_manager.thread_status_interval();
33  const bool update_thread_status = thread_status_manager.update_thread_status();
34 
35  ThreadStatusManager::Start s(thread_status_manager, "DcpsUpcalls");
36 
37  MonotonicTimePoint expire = MonotonicTimePoint::now() + thread_status_interval;
38 
40  if (!drr) {
41  return 0;
42  }
43  drr->add_association(reader_, wa_, active_);
44 
45  {
47  reader_done_ = true;
48  cnd_.notify_one();
49  while (!writer_done_) {
50  if (update_thread_status) {
51  switch (cnd_.wait_until(expire, thread_status_manager)) {
52  case CvStatus_NoTimeout:
53  break;
54 
55  case CvStatus_Timeout:
56  expire = MonotonicTimePoint::now() + thread_status_interval;
57  break;
58 
59  case CvStatus_Error:
60  if (DCPS_debug_level) {
61  ACE_ERROR((LM_ERROR, "(%P|%t) ERROR: DcpsUpcalls::svc: error in wait_utill\n"));
62  }
63  return -1;
64  }
65  } else if (cnd_.wait(thread_status_manager) == CvStatus_Error) {
66  if (DCPS_debug_level) {
67  ACE_ERROR((LM_ERROR, "(%P|%t) ERROR: DcpsUpcalls::svc: error in wait\n"));
68  }
69  return -1;
70  }
71  }
72  }
73 
74  return 0;
75 }
#define ACE_ERROR(X)
static TimePoint_T< MonotonicClock > now()
Definition: TimePoint_T.inl:41
RcHandle< T > lock() const
Definition: RcObject.h:188
DataReaderCallbacks_wrch drr_
Definition: DcpsUpcalls.h:37
RcHandle< DataReaderCallbacks > DataReaderCallbacks_rch
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
ACE_Thread_Mutex mtx_
Definition: DcpsUpcalls.h:43
const GUID_t & reader_
Definition: DcpsUpcalls.h:38
The wait has returned because of a timeout.
CvStatus wait(ThreadStatusManager &thread_status_manager)
Block until thread is woken up.
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
TimePoint_T< MonotonicClock > MonotonicTimePoint
Definition: TimeTypes.h:51
ConditionVariable< ACE_Thread_Mutex > cnd_
Definition: DcpsUpcalls.h:44
const WriterAssociation & wa_
Definition: DcpsUpcalls.h:39
bool notify_one()
Unblock one of the threads waiting on this condition.
#define TheServiceParticipant
CvStatus wait_until(const MonotonicTimePoint &expire_at, ThreadStatusManager &thread_status_manager)
Block until woken up or until expire_at. Same as wait() if expire_at is zero.
The wait has returned because it was woken up.

◆ writer_done()

void OpenDDS::DCPS::DcpsUpcalls::writer_done ( )

Definition at line 77 of file DcpsUpcalls.cpp.

References ACE_GUARD, cnd_, mtx_, OpenDDS::DCPS::ConditionVariable< Mutex >::notify_one(), OPENDDS_END_VERSIONED_NAMESPACE_DECL, TheServiceParticipant, ACE_Task_Base::wait(), and writer_done_.

Referenced by OpenDDS::DCPS::StaticEndpointManager::match_continue().

78 {
79  {
81  writer_done_ = true;
82  cnd_.notify_one();
83  }
84 
85  ThreadStatusManager& thread_status_manager = TheServiceParticipant->get_thread_status_manager();
86  ThreadStatusManager::Sleeper sleeper(thread_status_manager);
87  wait(); // ACE_Task_Base::wait does not accept a timeout
88 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
ACE_Thread_Mutex mtx_
Definition: DcpsUpcalls.h:43
virtual int wait(void)
ConditionVariable< ACE_Thread_Mutex > cnd_
Definition: DcpsUpcalls.h:44
bool notify_one()
Unblock one of the threads waiting on this condition.
#define TheServiceParticipant

Member Data Documentation

◆ active_

bool OpenDDS::DCPS::DcpsUpcalls::active_
private

Definition at line 40 of file DcpsUpcalls.h.

Referenced by svc().

◆ cnd_

ConditionVariable<ACE_Thread_Mutex> OpenDDS::DCPS::DcpsUpcalls::cnd_
private

Definition at line 44 of file DcpsUpcalls.h.

Referenced by svc(), and writer_done().

◆ drr_

DataReaderCallbacks_wrch OpenDDS::DCPS::DcpsUpcalls::drr_
private

Definition at line 37 of file DcpsUpcalls.h.

Referenced by svc().

◆ dwr_

DataWriterCallbacks_wrch OpenDDS::DCPS::DcpsUpcalls::dwr_
private

Definition at line 41 of file DcpsUpcalls.h.

◆ mtx_

ACE_Thread_Mutex OpenDDS::DCPS::DcpsUpcalls::mtx_
private

Definition at line 43 of file DcpsUpcalls.h.

Referenced by svc(), and writer_done().

◆ reader_

const GUID_t& OpenDDS::DCPS::DcpsUpcalls::reader_
private

Definition at line 38 of file DcpsUpcalls.h.

Referenced by svc().

◆ reader_done_

bool OpenDDS::DCPS::DcpsUpcalls::reader_done_
private

Definition at line 42 of file DcpsUpcalls.h.

Referenced by svc().

◆ wa_

const WriterAssociation& OpenDDS::DCPS::DcpsUpcalls::wa_
private

Definition at line 39 of file DcpsUpcalls.h.

Referenced by svc().

◆ writer_done_

bool OpenDDS::DCPS::DcpsUpcalls::writer_done_
private

Definition at line 42 of file DcpsUpcalls.h.

Referenced by svc(), and writer_done().


The documentation for this class was generated from the following files: