MADARA  3.2.3
ZMQContext.cpp
Go to the documentation of this file.
1 #include "ZMQContext.h"
2 #include <zmq.h>
4 
6 
8  : context_ (0), references_ (0)
9 {
10 }
11 
12 void
14 {
16  "ZMQContext::set_context:" \
17  " setting the context\n");
18 
19  if (context != context_)
20  {
22  "ZMQContext::set_context:" \
23  " context is different from new context. Destroying old context.\n");
24 
25  destroy_context ();
26 
28  "ZMQContext::set_context:" \
29  " updating context and reference count.\n");
30 
31  context_ = context;
32  references_ = 1;
33 
35  "ZMQContext::set_context:" \
36  " result: context=%p, references=%d\n",
37  context_, int(references_));
38  }
39 }
40 
41 void
43 {
44  if (context_ == 0)
45  {
47  "ZMQContext::add_ref:" \
48  " context didn't exist. Creating new context.\n",
49  context_, int(references_));
50 
51  references_ = 1;
52  context_ = zmq_ctx_new ();
53  }
54  else
55  {
56  ++references_;
57  }
58 
60  "ZMQContext::add_ref:" \
61  " result: context=%p, references=%d\n",
62  context_, int(references_));
63 }
64 
65 void
67 {
68  if (references_ > 0)
69  {
71  "ZMQContext::rem_ref:" \
72  " removing reference from context.\n",
73  context_, int(references_));
74 
75  --references_;
76 
77  if (references_ == 0)
78  {
79  destroy_context ();
80  }
81  }
82 
84  "ZMQContext::rem_ref:" \
85  " result: context=%p, references=%d\n",
86  context_, int(references_));
87 }
88 
89 void
91 {
92  if (context_ != 0)
93  {
95  "ZMQContext::destroy_context:" \
96  " destroying context.\n",
97  context_, int(references_));
98 
99  zmq_ctx_destroy (context_);
100  context_ = 0;
101  references_ = 0;
102  }
103 }
104 
109 {
110  destroy_context ();
111 }
void rem_ref(void)
Removes a reference to the context.
Definition: ZMQContext.cpp:66
MADARA_EXPORT ZMQContext zmq_context
Definition: ZMQContext.cpp:5
MADARA_EXPORT utility::Refcounter< logger::Logger > global_logger
void destroy_context(void)
Destroys the underlying context.
Definition: ZMQContext.cpp:90
void set_context(void *context)
Retrieves the underlying ZMQ context.
Definition: ZMQContext.cpp:13
#define madara_logger_ptr_log(logger, level,...)
Fast version of the madara::logger::log method for Logger pointers.
Definition: Logger.h:32
void add_ref(void)
Adds a reference to the context.
Definition: ZMQContext.cpp:42
void * context_
the context
Definition: ZMQContext.h:74
std::atomic< int > references_
track the number of references to the context
Definition: ZMQContext.h:77
A class that manages a ZMQ context.
Definition: ZMQContext.h:23