[zeromq-dev] Possibly a memleak in zframe_new()
Yauheni Baltouski
ybaltouski at gmail.com
Thu Sep 19 15:08:10 CEST 2013
Hi Mathias,
According to CZMQ manual, construction like
char *msgData = zframe_strdup(zmsg_pop(m));
zframe_t *frame = zmsg_pop(m);
will return frame from message m and caller own this frame.
So you need to zframe_destroy(&frame) after you call zframe_strdup()
as it creates copy of
string in frame and you release only this copy mem, not zframe.
2013/9/19 Mathias Hablützel <habl at zhaw.ch>:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi everyone,
>
> ran into a situation where my code seems to leak memory but I can't
> tackle it down in _my_ code. Kicked off valgrind to find this:
>
> ==2874== 56 bytes in 1 blocks are definitely lost in loss record 34 of 72
> ==2874== at 0x4A08121: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==2874== by 0x4E7A968: zframe_new (czmq_prelude.h:443)
> ==2874== by 0x4E7AB48: zframe_recv (zframe.c:156)
> ==2874== by 0x4E7ED84: zmsg_recv (zmsg.c:101)
> ==2874== by 0x401458: _recv_message (kt_server.c:114)
>
> _recv_message() is my function, snippet:
>
> zmsg_t *m = zmsg_recv(sock);
> assert(m);
> char *msgData = zframe_strdup(zmsg_pop(m));
> zmsg_destroy(&m);
> free (msgData);
>
>
> So, I tracked this further down to zframe_new() which actually allocates
> sizeof(zframe_t) and later passes this to zmq_msg_init(). Since I work
> with a ZMQ_REP socket here, this must be in zmq::router_t::xrecv or more
> precisely in fq.recvpipe. recvpipe then calls zmq::msg_t::close.
>
> And this is where I suspect the memory leak to happen. The union-struct
> u defined in msg.hpp seems not to be freed correctly. But all this is
> massive speculation from my side — mostly because I'm just a
> beginner/noob and I have no clue about libzmq nor about C++.
>
> Let me know if I'm just a noob with no clue or I found something. :)
>
> Happy Hacking
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.21 (Darwin)
>
> iQIcBAEBAgAGBQJSOvXmAAoJEKkVOTYKXmyzs1gP/0lduRNVvjDe9Lf1H1kRZr4O
> RFqHWbfFxzEB3boLhpbvOE6mEedfPvyZnNeswm4pL4ROomRDABrJksxhEFGNAZqv
> nOk0lKwwouj6NwwfgiSasgprydsKfvfLAmvxSELP8yb7bJAKNg7P72Ec/lU1mIv+
> kNbrMYG855awGUsJeOm1Y8c4nrJd/i7uc6U++bWu6u3yOQQDPP2gjpcdaaWIk47B
> GH/vZVfMmJjjB2QCcBnvaToQ2KiTPmr0JBOjgvMz6V3A1WXDYDwxZbxqt/ZJiptF
> AUCGY66gjK3fu9dyGmYEATN7P8bmLv99TzJ/ptHvQ1WDrsyyzDniumZ6yXyRhjKN
> lIvDqEdHH27xBGP5ml7UHCySMmyD+PGG1dPtijSd+0/YYey5/PcY809qaRbT6CKl
> XYzn3/HE5qPsKcPmriWm32Mk/1ujQfRGcdUemW0cHHL7Xa0F/R7NzVWr26hyDXt5
> huyMaMURDD8aWf7qWQ+Iyz85PphO36InRShSS9FJT5jrqkOamwtrSJ5Z72as+bJ5
> KbL9GowSE+tUyp2yDIIex5Ji6Rr7z8Kt8XRx9sh8+pnWcmVJwO53tkP1HqXVuoHm
> tlydMrxfneJPNnIF2vUTzjei1KEOed6QyQy8nZwGKFo3NspTTToZtxkTf/JiMbtE
> lNH7SzVoOJpa2+PftIBb
> =3xQ5
> -----END PGP SIGNATURE-----
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
More information about the zeromq-dev
mailing list