On Mon, 2017-10-23 at 10:51 +0000, Juergen Gnoss wrote:
>
> I use czmq from master pulled and built a few days ago.
>
>
> zhashx_t is meant as a hash that can handle other objects than
> strings.
>
> That's what I understand and that's how I used it in some projects
> before.
>
> (both, objects and keys where other than simple strings)
>
>
> Now I did use zframe_t as keys and (char *) as items and setup zhashx
> like so:
>
>
> assuming that my items (constant strings) are handled out of the box
> I just
>
> gave comparator, duplicator and destructor to the key, which in my
> case is
>
> another object than a string.
>
>
>
> first defining the comparator
>
>
> ```c
>
> static int s_scompfn(zframe_t *f1, zframe_t *f2){
> if (zframe_eq(f1, f2)) {
> return 0;
> }
> return 1;
> }
>
>
> ```
>
> then
>
>
> ```c
>
> zhashx_t *deviceComID_List = zhashx_new ();
>
>
> zhashx_set_key_destructor (deviceComID_List, (zhashx_destructor_fn *)
> zframe_destroy);
> zhashx_set_key_duplicator (deviceComID_List, (zhashx_duplicator_fn *)
> zframe_dup);
> zhashx_set_key_comparator(deviceComID_List, (zhashx_comparator_fn *)
> s_scompfn);
>
> ```
>
> some code to use that hash is
>
>
> ```c
>
>
> char *item = (char *)zhashx_lookup(deviceList, cid_frame);
> if (item == NULL) {
> zhashx_insert(deviceList, cid_frame, "");
> } else {
> zhashx_delete (deviceList, cid_frame);
> }
>
>
> ```
>
>
> Ending up that the program eats up all my memory as seen in
>
> https://pastebin.com/JCdPGHME
>
> (that's the valgrind massif output)
>
>
>
> Is it, because my (item) strings are empty at that moment?
>
>
> If I give constructor and duplicator as well for the items (strings)
> to zhashx,
>
> it works as expected.
>
>
> https://pastebin.com/mCvtKp6L
>
>
>
> I didn't get it from Documentation, that all that duplicators and
>
> destructors are obligatory to set.
>
>
> Am I the only one stumbling into that?
>
>
> JuHi, Yes, by default items are not destroyed as the docs for the destructor say: // Set a user-defined deallocator for hash items; by default items are not // freed when the hash is destroyed. CZMQ_EXPORT void zhashx_set_destructor (zhashx_t *self, zhashx_destructor_fn destructor); https://github.com/zeromq/czmq#zhashx---extended-generic-hash-container -- Kind regards, Luca Boccassi
signature.asc
Description: This is a digitally signed message part
_______________________________________________ zeromq-dev mailing list [email protected] https://lists.zeromq.org/mailman/listinfo/zeromq-dev
