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? > > > Ju
Hi, 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 zeromq-dev@lists.zeromq.org https://lists.zeromq.org/mailman/listinfo/zeromq-dev