mirror of
https://github.com/zeromq/libzmq.git
synced 2025-10-30 21:50:49 +01:00
hint parameter added to zmq_free function
This commit is contained in:
@@ -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
|
|||||||
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
|
|||||||
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
|
|||||||
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_)
|
|||||||
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_,
|
|||||||
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_)
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user