Commit ab5abf6c authored by Martin Sustrik's avatar Martin Sustrik

hint parameter added to zmq_free function

parent 02202ec3
...@@ -106,12 +106,12 @@ typedef struct ...@@ -106,12 +106,12 @@ typedef struct
unsigned char vsm_data [ZMQ_MAX_VSM_SIZE]; unsigned char vsm_data [ZMQ_MAX_VSM_SIZE];
} zmq_msg_t; } zmq_msg_t;
typedef void (zmq_free_fn) (void *data); typedef void (zmq_free_fn) (void *data, void *hint);
ZMQ_EXPORT int zmq_msg_init (zmq_msg_t *msg); ZMQ_EXPORT int zmq_msg_init (zmq_msg_t *msg);
ZMQ_EXPORT int zmq_msg_init_size (zmq_msg_t *msg, size_t size); ZMQ_EXPORT int zmq_msg_init_size (zmq_msg_t *msg, size_t size);
ZMQ_EXPORT int zmq_msg_init_data (zmq_msg_t *msg, void *data, ZMQ_EXPORT int zmq_msg_init_data (zmq_msg_t *msg, void *data,
size_t size, zmq_free_fn *ffn); size_t size, zmq_free_fn *ffn, void *hint);
ZMQ_EXPORT int zmq_msg_close (zmq_msg_t *msg); ZMQ_EXPORT int zmq_msg_close (zmq_msg_t *msg);
ZMQ_EXPORT int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src); ZMQ_EXPORT int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src);
ZMQ_EXPORT int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src); ZMQ_EXPORT int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src);
......
...@@ -74,9 +74,10 @@ namespace zmq ...@@ -74,9 +74,10 @@ namespace zmq
throw error_t (); throw error_t ();
} }
inline message_t (void *data_, size_t size_, free_fn *ffn_) inline message_t (void *data_, size_t size_, free_fn *ffn_,
void *hint_ = NULL)
{ {
int rc = zmq_msg_init_data (this, data_, size_, ffn_); int rc = zmq_msg_init_data (this, data_, size_, ffn_, hint_);
if (rc != 0) if (rc != 0)
throw error_t (); throw error_t ();
} }
...@@ -108,12 +109,13 @@ namespace zmq ...@@ -108,12 +109,13 @@ namespace zmq
throw error_t (); throw error_t ();
} }
inline void rebuild (void *data_, size_t size_, free_fn *ffn_) inline void rebuild (void *data_, size_t size_, free_fn *ffn_,
void *hint_ = NULL)
{ {
int rc = zmq_msg_close (this); int rc = zmq_msg_close (this);
if (rc != 0) if (rc != 0)
throw error_t (); throw error_t ();
rc = zmq_msg_init_data (this, data_, size_, ffn_); rc = zmq_msg_init_data (this, data_, size_, ffn_, hint_);
if (rc != 0) if (rc != 0)
throw error_t (); throw error_t ();
} }
......
...@@ -42,6 +42,7 @@ namespace zmq ...@@ -42,6 +42,7 @@ namespace zmq
void *data; void *data;
size_t size; size_t size;
zmq_free_fn *ffn; zmq_free_fn *ffn;
void *hint;
zmq::atomic_counter_t refcnt; zmq::atomic_counter_t refcnt;
}; };
......
...@@ -103,13 +103,14 @@ int zmq_msg_init_size (zmq_msg_t *msg_, size_t size_) ...@@ -103,13 +103,14 @@ int zmq_msg_init_size (zmq_msg_t *msg_, size_t size_)
content->data = (void*) (content + 1); content->data = (void*) (content + 1);
content->size = size_; content->size = size_;
content->ffn = NULL; content->ffn = NULL;
content->hint = NULL;
new (&content->refcnt) zmq::atomic_counter_t (); new (&content->refcnt) zmq::atomic_counter_t ();
} }
return 0; return 0;
} }
int zmq_msg_init_data (zmq_msg_t *msg_, void *data_, size_t size_, int zmq_msg_init_data (zmq_msg_t *msg_, void *data_, size_t size_,
zmq_free_fn *ffn_) zmq_free_fn *ffn_, void *hint_)
{ {
msg_->shared = 0; msg_->shared = 0;
msg_->content = (zmq::msg_content_t*) malloc (sizeof (zmq::msg_content_t)); msg_->content = (zmq::msg_content_t*) malloc (sizeof (zmq::msg_content_t));
...@@ -118,6 +119,7 @@ int zmq_msg_init_data (zmq_msg_t *msg_, void *data_, size_t size_, ...@@ -118,6 +119,7 @@ int zmq_msg_init_data (zmq_msg_t *msg_, void *data_, size_t size_,
content->data = data_; content->data = data_;
content->size = size_; content->size = size_;
content->ffn = ffn_; content->ffn = ffn_;
content->hint = hint_;
new (&content->refcnt) zmq::atomic_counter_t (); new (&content->refcnt) zmq::atomic_counter_t ();
return 0; return 0;
} }
...@@ -139,7 +141,7 @@ int zmq_msg_close (zmq_msg_t *msg_) ...@@ -139,7 +141,7 @@ int zmq_msg_close (zmq_msg_t *msg_)
content->refcnt.~atomic_counter_t (); content->refcnt.~atomic_counter_t ();
if (content->ffn) if (content->ffn)
content->ffn (content->data); content->ffn (content->data, content->hint);
free (content); free (content);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment