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

#include <JobQueue.h>

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

Public Member Functions

 JobQueue (ACE_Reactor *reactor)
 
void enqueue (JobPtr job)
 
- Public Member Functions inherited from OpenDDS::DCPS::RcEventHandler
 RcEventHandler ()
 
ACE_Event_Handler::Reference_Count add_reference ()
 
ACE_Event_Handler::Reference_Count remove_reference ()
 
- 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_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
 
Reference_Counting_Policyreference_counting_policy (void)
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 

Private Member Functions

typedef OPENDDS_VECTOR (JobPtr) Queue
 
int handle_exception (ACE_HANDLE)
 

Private Attributes

ACE_Thread_Mutex mutex_
 
Queue job_queue_
 

Additional Inherited Members

- Public Types inherited from ACE_Event_Handler
typedef long Reference_Count
 
- 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_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 Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 
- Protected Attributes inherited from ACE_Event_Handler
Atomic_Reference_Count reference_count_
 

Detailed Description

Definition at line 57 of file JobQueue.h.

Constructor & Destructor Documentation

◆ JobQueue()

OpenDDS::DCPS::JobQueue::JobQueue ( ACE_Reactor reactor)
explicit

Definition at line 19 of file JobQueue.cpp.

References ACE_Event_Handler::reactor().

20 {
21  this->reactor(reactor);
22 }
virtual ACE_Reactor * reactor(void) const

Member Function Documentation

◆ enqueue()

void OpenDDS::DCPS::JobQueue::enqueue ( JobPtr  job)
inline

Definition at line 61 of file JobQueue.h.

References ACE_GUARD, and ACE_Reactor::notify().

Referenced by OpenDDS::DCPS::RtpsUdpTransport::disable_relay_stun_task(), OpenDDS::DCPS::RtpsUdpTransport::process_relay_sra(), and OpenDDS::DCPS::InternalDataReaderListener< NetworkInterfaceAddress >::schedule().

62  {
64  const bool empty = job_queue_.empty();
65  job_queue_.push_back(job);
66  if (empty) {
67  guard.release();
68  reactor()->notify(this);
69  }
70  }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
int notify(ACE_Event_Handler *event_handler=0, ACE_Reactor_Mask masks=ACE_Event_Handler::EXCEPT_MASK, ACE_Time_Value *timeout=0)
virtual ACE_Reactor * reactor(void) const
ACE_Thread_Mutex mutex_
Definition: JobQueue.h:73

◆ handle_exception()

int OpenDDS::DCPS::JobQueue::handle_exception ( ACE_HANDLE  )
privatevirtual

Reimplemented from ACE_Event_Handler.

Definition at line 24 of file JobQueue.cpp.

References ACE_GUARD_RETURN, job_queue_, mutex_, ACE_Reactor::notify(), OPENDDS_END_VERSIONED_NAMESPACE_DECL, ACE_Event_Handler::reactor(), and TheServiceParticipant.

25 {
26  ThreadStatusManager::Event ev(TheServiceParticipant->get_thread_status_manager());
27 
28  Queue q;
29 
32  q.swap(job_queue_);
33  for (Queue::const_iterator pos = q.begin(), limit = q.end(); pos != limit; ++pos) {
34  ACE_GUARD_RETURN(ACE_Reverse_Lock<ACE_Thread_Mutex>, rev_guard, rev_lock, -1);
35  (*pos)->execute();
36  }
37 
38  if (!job_queue_.empty()) {
39  guard.release();
40  reactor()->notify(this);
41  }
42 
43  return 0;
44 }
int notify(ACE_Event_Handler *event_handler=0, ACE_Reactor_Mask masks=ACE_Event_Handler::EXCEPT_MASK, ACE_Time_Value *timeout=0)
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
virtual ACE_Reactor * reactor(void) const
ACE_Thread_Mutex mutex_
Definition: JobQueue.h:73
#define TheServiceParticipant

◆ OPENDDS_VECTOR()

typedef OpenDDS::DCPS::JobQueue::OPENDDS_VECTOR ( JobPtr  )
private

Member Data Documentation

◆ job_queue_

Queue OpenDDS::DCPS::JobQueue::job_queue_
private

Definition at line 75 of file JobQueue.h.

Referenced by handle_exception().

◆ mutex_

ACE_Thread_Mutex OpenDDS::DCPS::JobQueue::mutex_
private

Definition at line 73 of file JobQueue.h.

Referenced by handle_exception().


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