summaryrefslogtreecommitdiff
path: root/src/command.hpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@fastmq.commkdir>2009-08-08 16:01:58 +0200
committerMartin Sustrik <sustrik@fastmq.commkdir>2009-08-08 16:01:58 +0200
commita8b410e66c3c75809c8e9c01dd3e35c579f02347 (patch)
tree7af63906dce0216f86e5ff0767efaddfd6492cfd /src/command.hpp
parent0b5cc026fbe7ccc6de66907be29471562a2d344d (diff)
lockfree interaction patter for 3 theads implemented
Diffstat (limited to 'src/command.hpp')
-rw-r--r--src/command.hpp59
1 files changed, 24 insertions, 35 deletions
diff --git a/src/command.hpp b/src/command.hpp
index 69c4e57..de94ca3 100644
--- a/src/command.hpp
+++ b/src/command.hpp
@@ -35,60 +35,49 @@ namespace zmq
enum type_t
{
stop,
+ plug,
+ own,
bind,
- head,
- tail,
- reg,
- reg_and_bind,
- unreg,
- engine,
- terminate,
- terminate_ack
+ term_req,
+ term,
+ term_ack
+
} type;
union {
+ // Sent to I/O thread to let it know that it should
+ // terminate itself.
struct {
} stop;
+ // Sent to I/O object to make it register with its I/O thread.
struct {
- class pipe_reader_t *reader;
- class session_t *peer;
- } bind;
+ } plug;
+ // Sent to socket to let it know about the newly created object.
struct {
- uint64_t bytes;
- } tail;
+ class object_t *object;
+ } own;
+ // Sent between objects to establish pipe(s) between them.
struct {
- uint64_t bytes;
- } head;
-
- struct {
- class simple_semaphore_t *smph;
- } reg;
-
- struct {
- class session_t *peer;
- bool flow_in;
- bool flow_out;
- } reg_and_bind;
-
- struct {
- class simple_semaphore_t *smph;
- } unreg;
+ } bind;
- // TODO: Engine object won't be deallocated on terminal shutdown
- // while the command is still on the fly!
+ // Sent by I/O object ot the socket to request the shutdown of
+ // the I/O object.
struct {
- class i_engine *engine;
- } engine;
+ class object_t *object;
+ } term_req;
+ // Sent by socket to I/O object to start its shutdown.
struct {
- } terminate;
+ } term;
+ // Sent by I/O object to the socket to acknowledge it has
+ // shut down.
struct {
- } terminate_ack;
+ } term_ack;
} args;
};