* [Caml-list] Potential OCaml-ZMQ memory management problems @ 2014-12-04 6:09 Kenneth Adam Miller 2014-12-04 7:55 ` Anders Fugmann 0 siblings, 1 reply; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-04 6:09 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 458 bytes --] I'm using ocaml-zmq (https://github.com/issuu/ocaml-zmq) and I think I'm encountering a memory management issue. I could be wrong however, but basically the issue (I think) is I have a rather large set of messages to send via zmq, and I'm getting a segfault. Does anybody know if I need to free the strings received from zmq recv functions in ocaml? If so how do I do that from ocaml? There's no code because this is just a general novice ocaml questions. [-- Attachment #2: Type: text/html, Size: 1059 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 6:09 [Caml-list] Potential OCaml-ZMQ memory management problems Kenneth Adam Miller @ 2014-12-04 7:55 ` Anders Fugmann 2014-12-04 8:02 ` Kenneth Adam Miller 0 siblings, 1 reply; 14+ messages in thread From: Anders Fugmann @ 2014-12-04 7:55 UTC (permalink / raw) To: Kenneth Adam Miller, caml users Hi Kenneth, The Ocaml-zmq code copies data from received messages into memory under the control of the ocaml garbage collector, and immediatly frees the ZMQ buffers. You do not need to explicitly free the data received from call to recv. Can you produce a small sample code that exposes the problem? We are using the ocaml-zmq binding extensively, and have not seen any problems. If I were to take a wild guess, it either a mismatch between library versions or the garbage-collector collecting the socket or zmq context. What version of the ocaml-zmq bindings and libzmq (c impl) are you using? /Anders On 12/04/2014 07:09 AM, Kenneth Adam Miller wrote: > I'm using ocaml-zmq (https://github.com/issuu/ocaml-zmq) and I think I'm > encountering a memory management issue. I could be wrong however, but > basically the issue (I think) is I have a rather large set of messages > to send via zmq, and I'm getting a segfault. > > Does anybody know if I need to free the strings received from zmq recv > functions in ocaml? If so how do I do that from ocaml? > > There's no code because this is just a general novice ocaml questions. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 7:55 ` Anders Fugmann @ 2014-12-04 8:02 ` Kenneth Adam Miller 2014-12-04 9:59 ` Anders Fugmann 0 siblings, 1 reply; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-04 8:02 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 2065 bytes --] I'm using zmq and ocaml-zmq as installed by opam; I'm not at my work computer or I would provide those details. Yes, I will try to work on creating a reproducible script Could it possibly be a call to Tunegc.set_gc () from https://github.com/argp/bap/blob/master/ocaml/tunegc.ml ? I notice that this error didn't appear in single calls to my utility; basically, I'm using iltrans from bap and I'm using it in a long living process, unlike the current implementation which expects a few transformations and then process death. I did notice that when I run it, if I'm watching system monitor that it begins consuming vast amounts of memory (quickly grows from a few megabytes to 800+) before it hits segfault. Would there be any way to restore the aggressiveness of the GC between calls to iltrans? On Thu, Dec 4, 2014 at 2:55 AM, Anders Fugmann <anders@fugmann.net> wrote: > Hi Kenneth, > > The Ocaml-zmq code copies data from received messages into memory under > the control of the ocaml garbage collector, and immediatly frees the ZMQ > buffers. > > You do not need to explicitly free the data received from call to recv. > > Can you produce a small sample code that exposes the problem? We are using > the ocaml-zmq binding extensively, and have not seen any problems. > > If I were to take a wild guess, it either a mismatch between library > versions or the garbage-collector collecting the socket or zmq context. > > What version of the ocaml-zmq bindings and libzmq (c impl) are you using? > > /Anders > > > > On 12/04/2014 07:09 AM, Kenneth Adam Miller wrote: > >> I'm using ocaml-zmq (https://github.com/issuu/ocaml-zmq) and I think I'm >> encountering a memory management issue. I could be wrong however, but >> basically the issue (I think) is I have a rather large set of messages >> to send via zmq, and I'm getting a segfault. >> >> Does anybody know if I need to free the strings received from zmq recv >> functions in ocaml? If so how do I do that from ocaml? >> >> There's no code because this is just a general novice ocaml questions. >> > > [-- Attachment #2: Type: text/html, Size: 2905 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 8:02 ` Kenneth Adam Miller @ 2014-12-04 9:59 ` Anders Fugmann 2014-12-04 10:04 ` Kenneth Adam Miller 0 siblings, 1 reply; 14+ messages in thread From: Anders Fugmann @ 2014-12-04 9:59 UTC (permalink / raw) To: Kenneth Adam Miller, caml users The garbage collector settings seems quite sane to me. You could try to force a major collection every call to iltrans. Gc.major () It could be that the segfault is really an out of memory situation. Maybe you have a leak in your code somewhere (Not releasing references to large objects). /Anders On 12/04/2014 09:02 AM, Kenneth Adam Miller wrote: > I'm using zmq and ocaml-zmq as installed by opam; I'm not at my work > computer or I would provide those details. > > Yes, I will try to work on creating a reproducible script > > Could it possibly be a call to Tunegc.set_gc () from > https://github.com/argp/bap/blob/master/ocaml/tunegc.ml ? > > I notice that this error didn't appear in single calls to my utility; > basically, I'm using iltrans from bap and I'm using it in a long living > process, unlike the current implementation which expects a few > transformations and then process death. I did notice that when I run it, > if I'm watching system monitor that it begins consuming vast amounts of > memory (quickly grows from a few megabytes to 800+) before it hits > segfault. Would there be any way to restore the aggressiveness of the GC > between calls to iltrans? > > On Thu, Dec 4, 2014 at 2:55 AM, Anders Fugmann <anders@fugmann.net > <mailto:anders@fugmann.net>> wrote: > > Hi Kenneth, > > The Ocaml-zmq code copies data from received messages into memory under > the control of the ocaml garbage collector, and immediatly frees the > ZMQ buffers. > > You do not need to explicitly free the data received from call to recv. > > Can you produce a small sample code that exposes the problem? We are > using the ocaml-zmq binding extensively, and have not seen any problems. > > If I were to take a wild guess, it either a mismatch between library > versions or the garbage-collector collecting the socket or zmq context. > > What version of the ocaml-zmq bindings and libzmq (c impl) are you > using? > > /Anders > > > > On 12/04/2014 07:09 AM, Kenneth Adam Miller wrote: > > I'm using ocaml-zmq (https://github.com/issuu/__ocaml-zmq > <https://github.com/issuu/ocaml-zmq>) and I think I'm > encountering a memory management issue. I could be wrong > however, but > basically the issue (I think) is I have a rather large set of > messages > to send via zmq, and I'm getting a segfault. > > Does anybody know if I need to free the strings received from > zmq recv > functions in ocaml? If so how do I do that from ocaml? > > There's no code because this is just a general novice ocaml > questions. > > > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 9:59 ` Anders Fugmann @ 2014-12-04 10:04 ` Kenneth Adam Miller 2014-12-04 16:39 ` Kenneth Adam Miller 0 siblings, 1 reply; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-04 10:04 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 3035 bytes --] Ok I'll give that a shot when I get a chance to edit it. Thanks, gc.major... I'm new to ocaml and I'm still reading through RWO, on chapter 9 learning about how modules compose nicely :) On Thu, Dec 4, 2014 at 4:59 AM, Anders Fugmann <anders@fugmann.net> wrote: > The garbage collector settings seems quite sane to me. You could try to > force a major collection every call to iltrans. > > Gc.major () > > It could be that the segfault is really an out of memory situation. Maybe > you have a leak in your code somewhere (Not releasing references to large > objects). > > /Anders > > > On 12/04/2014 09:02 AM, Kenneth Adam Miller wrote: > >> I'm using zmq and ocaml-zmq as installed by opam; I'm not at my work >> computer or I would provide those details. >> >> Yes, I will try to work on creating a reproducible script >> >> Could it possibly be a call to Tunegc.set_gc () from >> https://github.com/argp/bap/blob/master/ocaml/tunegc.ml ? >> >> I notice that this error didn't appear in single calls to my utility; >> basically, I'm using iltrans from bap and I'm using it in a long living >> process, unlike the current implementation which expects a few >> transformations and then process death. I did notice that when I run it, >> if I'm watching system monitor that it begins consuming vast amounts of >> memory (quickly grows from a few megabytes to 800+) before it hits >> segfault. Would there be any way to restore the aggressiveness of the GC >> between calls to iltrans? >> >> On Thu, Dec 4, 2014 at 2:55 AM, Anders Fugmann <anders@fugmann.net >> <mailto:anders@fugmann.net>> wrote: >> >> Hi Kenneth, >> >> The Ocaml-zmq code copies data from received messages into memory >> under >> the control of the ocaml garbage collector, and immediatly frees the >> ZMQ buffers. >> >> You do not need to explicitly free the data received from call to >> recv. >> >> Can you produce a small sample code that exposes the problem? We are >> using the ocaml-zmq binding extensively, and have not seen any >> problems. >> >> If I were to take a wild guess, it either a mismatch between library >> versions or the garbage-collector collecting the socket or zmq >> context. >> >> What version of the ocaml-zmq bindings and libzmq (c impl) are you >> using? >> >> /Anders >> >> >> >> On 12/04/2014 07:09 AM, Kenneth Adam Miller wrote: >> >> I'm using ocaml-zmq (https://github.com/issuu/__ocaml-zmq >> <https://github.com/issuu/ocaml-zmq>) and I think I'm >> encountering a memory management issue. I could be wrong >> however, but >> basically the issue (I think) is I have a rather large set of >> messages >> to send via zmq, and I'm getting a segfault. >> >> Does anybody know if I need to free the strings received from >> zmq recv >> functions in ocaml? If so how do I do that from ocaml? >> >> There's no code because this is just a general novice ocaml >> questions. >> >> >> >> > [-- Attachment #2: Type: text/html, Size: 4186 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 10:04 ` Kenneth Adam Miller @ 2014-12-04 16:39 ` Kenneth Adam Miller 2014-12-04 16:45 ` Kenneth Adam Miller 0 siblings, 1 reply; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-04 16:39 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 3929 bytes --] ok, I tried it with Gc.major() and Gc.minor(); and that didn't eliminate the segfault. There's an issue with debugging too; when I compile my unit tests for debugging or byte code, it reports parameters not being found (as in the string returned from ZMQ is empty), even though a simple recompile with native code makes that specific mysterious error go away. In any case, because it does not receive the parameters while compiled for debug or byte code, it cannot proceed to the point where the segfault occurs. Also, just removing some of the preceeding tests in order that they not be in the way when compiled for byte or debug code causes the segfault to not occur... How do I debug this in binary mode? On Thu, Dec 4, 2014 at 5:04 AM, Kenneth Adam Miller < kennethadammiller@gmail.com> wrote: > Ok I'll give that a shot when I get a chance to edit it. Thanks, > gc.major... I'm new to ocaml and I'm still reading through RWO, on chapter > 9 learning about how modules compose nicely :) > > On Thu, Dec 4, 2014 at 4:59 AM, Anders Fugmann <anders@fugmann.net> wrote: > >> The garbage collector settings seems quite sane to me. You could try to >> force a major collection every call to iltrans. >> >> Gc.major () >> >> It could be that the segfault is really an out of memory situation. Maybe >> you have a leak in your code somewhere (Not releasing references to large >> objects). >> >> /Anders >> >> >> On 12/04/2014 09:02 AM, Kenneth Adam Miller wrote: >> >>> I'm using zmq and ocaml-zmq as installed by opam; I'm not at my work >>> computer or I would provide those details. >>> >>> Yes, I will try to work on creating a reproducible script >>> >>> Could it possibly be a call to Tunegc.set_gc () from >>> https://github.com/argp/bap/blob/master/ocaml/tunegc.ml ? >>> >>> I notice that this error didn't appear in single calls to my utility; >>> basically, I'm using iltrans from bap and I'm using it in a long living >>> process, unlike the current implementation which expects a few >>> transformations and then process death. I did notice that when I run it, >>> if I'm watching system monitor that it begins consuming vast amounts of >>> memory (quickly grows from a few megabytes to 800+) before it hits >>> segfault. Would there be any way to restore the aggressiveness of the GC >>> between calls to iltrans? >>> >>> On Thu, Dec 4, 2014 at 2:55 AM, Anders Fugmann <anders@fugmann.net >>> <mailto:anders@fugmann.net>> wrote: >>> >>> Hi Kenneth, >>> >>> The Ocaml-zmq code copies data from received messages into memory >>> under >>> the control of the ocaml garbage collector, and immediatly frees the >>> ZMQ buffers. >>> >>> You do not need to explicitly free the data received from call to >>> recv. >>> >>> Can you produce a small sample code that exposes the problem? We are >>> using the ocaml-zmq binding extensively, and have not seen any >>> problems. >>> >>> If I were to take a wild guess, it either a mismatch between library >>> versions or the garbage-collector collecting the socket or zmq >>> context. >>> >>> What version of the ocaml-zmq bindings and libzmq (c impl) are you >>> using? >>> >>> /Anders >>> >>> >>> >>> On 12/04/2014 07:09 AM, Kenneth Adam Miller wrote: >>> >>> I'm using ocaml-zmq (https://github.com/issuu/__ocaml-zmq >>> <https://github.com/issuu/ocaml-zmq>) and I think I'm >>> encountering a memory management issue. I could be wrong >>> however, but >>> basically the issue (I think) is I have a rather large set of >>> messages >>> to send via zmq, and I'm getting a segfault. >>> >>> Does anybody know if I need to free the strings received from >>> zmq recv >>> functions in ocaml? If so how do I do that from ocaml? >>> >>> There's no code because this is just a general novice ocaml >>> questions. >>> >>> >>> >>> >> > [-- Attachment #2: Type: text/html, Size: 5363 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 16:39 ` Kenneth Adam Miller @ 2014-12-04 16:45 ` Kenneth Adam Miller 2014-12-04 19:36 ` Anders Peter Fugmann 0 siblings, 1 reply; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-04 16:45 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 4281 bytes --] Actually, I literally just found the location of the error... I'm trying to send some data from ocaml that is causing ZMQ to segfault... On Thu, Dec 4, 2014 at 11:39 AM, Kenneth Adam Miller < kennethadammiller@gmail.com> wrote: > ok, I tried it with Gc.major() and Gc.minor(); and that didn't eliminate > the segfault. > > There's an issue with debugging too; when I compile my unit tests for > debugging or byte code, it reports parameters not being found (as in the > string returned from ZMQ is empty), even though a simple recompile with > native code makes that specific mysterious error go away. In any case, > because it does not receive the parameters while compiled for debug or byte > code, it cannot proceed to the point where the segfault occurs. Also, just > removing some of the preceeding tests in order that they not be in the way > when compiled for byte or debug code causes the segfault to not occur... > > How do I debug this in binary mode? > > On Thu, Dec 4, 2014 at 5:04 AM, Kenneth Adam Miller < > kennethadammiller@gmail.com> wrote: > >> Ok I'll give that a shot when I get a chance to edit it. Thanks, >> gc.major... I'm new to ocaml and I'm still reading through RWO, on chapter >> 9 learning about how modules compose nicely :) >> >> On Thu, Dec 4, 2014 at 4:59 AM, Anders Fugmann <anders@fugmann.net> >> wrote: >> >>> The garbage collector settings seems quite sane to me. You could try to >>> force a major collection every call to iltrans. >>> >>> Gc.major () >>> >>> It could be that the segfault is really an out of memory situation. >>> Maybe you have a leak in your code somewhere (Not releasing references to >>> large objects). >>> >>> /Anders >>> >>> >>> On 12/04/2014 09:02 AM, Kenneth Adam Miller wrote: >>> >>>> I'm using zmq and ocaml-zmq as installed by opam; I'm not at my work >>>> computer or I would provide those details. >>>> >>>> Yes, I will try to work on creating a reproducible script >>>> >>>> Could it possibly be a call to Tunegc.set_gc () from >>>> https://github.com/argp/bap/blob/master/ocaml/tunegc.ml ? >>>> >>>> I notice that this error didn't appear in single calls to my utility; >>>> basically, I'm using iltrans from bap and I'm using it in a long living >>>> process, unlike the current implementation which expects a few >>>> transformations and then process death. I did notice that when I run it, >>>> if I'm watching system monitor that it begins consuming vast amounts of >>>> memory (quickly grows from a few megabytes to 800+) before it hits >>>> segfault. Would there be any way to restore the aggressiveness of the GC >>>> between calls to iltrans? >>>> >>>> On Thu, Dec 4, 2014 at 2:55 AM, Anders Fugmann <anders@fugmann.net >>>> <mailto:anders@fugmann.net>> wrote: >>>> >>>> Hi Kenneth, >>>> >>>> The Ocaml-zmq code copies data from received messages into memory >>>> under >>>> the control of the ocaml garbage collector, and immediatly frees the >>>> ZMQ buffers. >>>> >>>> You do not need to explicitly free the data received from call to >>>> recv. >>>> >>>> Can you produce a small sample code that exposes the problem? We are >>>> using the ocaml-zmq binding extensively, and have not seen any >>>> problems. >>>> >>>> If I were to take a wild guess, it either a mismatch between library >>>> versions or the garbage-collector collecting the socket or zmq >>>> context. >>>> >>>> What version of the ocaml-zmq bindings and libzmq (c impl) are you >>>> using? >>>> >>>> /Anders >>>> >>>> >>>> >>>> On 12/04/2014 07:09 AM, Kenneth Adam Miller wrote: >>>> >>>> I'm using ocaml-zmq (https://github.com/issuu/__ocaml-zmq >>>> <https://github.com/issuu/ocaml-zmq>) and I think I'm >>>> encountering a memory management issue. I could be wrong >>>> however, but >>>> basically the issue (I think) is I have a rather large set of >>>> messages >>>> to send via zmq, and I'm getting a segfault. >>>> >>>> Does anybody know if I need to free the strings received from >>>> zmq recv >>>> functions in ocaml? If so how do I do that from ocaml? >>>> >>>> There's no code because this is just a general novice ocaml >>>> questions. >>>> >>>> >>>> >>>> >>> >> > [-- Attachment #2: Type: text/html, Size: 5920 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 16:45 ` Kenneth Adam Miller @ 2014-12-04 19:36 ` Anders Peter Fugmann 2014-12-04 21:48 ` Kenneth Adam Miller 0 siblings, 1 reply; 14+ messages in thread From: Anders Peter Fugmann @ 2014-12-04 19:36 UTC (permalink / raw) To: Kenneth Adam Miller, caml users Sending data over a zmq socket should not cause a segfault. I suggest that you open an issue on https://github.com/issuu/ocaml-zmq with exact details of the segfault and we can take a stab at it. /Anders On 04/12/14 17:45, Kenneth Adam Miller wrote: > Actually, I literally just found the location of the error... I'm trying > to send some data from ocaml that is causing ZMQ to segfault... ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 19:36 ` Anders Peter Fugmann @ 2014-12-04 21:48 ` Kenneth Adam Miller 2014-12-05 9:14 ` Anders Fugmann 0 siblings, 1 reply; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-04 21:48 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 1474 bytes --] Well I am just no thorough and you are correct. The sending of data over a zmq socket and the conversion of that data from string to protobuf encoded string all occurred in one line. One I added a print statement and then segregated them more cleanly, I can see that it is most certainly the line that converts to protobuf. The exact function that fails (on my end, could be deeper within this) is to_pb from here: https://github.com/argp/bap/blob/master/ocaml/piqi/ast_piqi.ml#L186 In any case, I did a test, and in my first function when to_pb gets called the first time and succeeds, I added an additional call to it... which also succeeded. But then in a subsequent unit test, the one that has been failing, still segfaults. If I turn off the tests prior to the segfaulting test, to_pb works in this particular run. But if the tests run before hand, something goes awry between the tests. Is it possible that to_pb is using some shared state between calls? On Thu, Dec 4, 2014 at 2:36 PM, Anders Peter Fugmann <anders@fugmann.net> wrote: > Sending data over a zmq socket should not cause a segfault. > > I suggest that you open an issue on > https://github.com/issuu/ocaml-zmq > with exact details of the segfault and we can take a stab at it. > > /Anders > > > On 04/12/14 17:45, Kenneth Adam Miller wrote: > >> Actually, I literally just found the location of the error... I'm trying >> to send some data from ocaml that is causing ZMQ to segfault... >> > > > [-- Attachment #2: Type: text/html, Size: 2418 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-04 21:48 ` Kenneth Adam Miller @ 2014-12-05 9:14 ` Anders Fugmann 2014-12-05 14:38 ` Kenneth Adam Miller 0 siblings, 1 reply; 14+ messages in thread From: Anders Fugmann @ 2014-12-05 9:14 UTC (permalink / raw) To: Kenneth Adam Miller, caml users On 12/04/2014 10:48 PM, Kenneth Adam Miller wrote: > Well I am just no thorough and you are correct. > > The sending of data over a zmq socket and the conversion of that data > from string to protobuf encoded string all occurred in one line. One I > added a print statement and then segregated them more cleanly, I can see > that it is most certainly the line that converts to protobuf. > > The exact function that fails (on my end, could be deeper within this) > is to_pb from here: > > https://github.com/argp/bap/blob/master/ocaml/piqi/ast_piqi.ml#L186 > > In any case, I did a test, and in my first function when to_pb gets > called the first time and succeeds, I added an additional call to it... > which also succeeded. But then in a subsequent unit test, the one that > has been failing, still segfaults. > > If I turn off the tests prior to the segfaulting test, to_pb works in > this particular run. But if the tests run before hand, something goes > awry between the tests. Is it possible that to_pb is using some shared > state between calls? I would not expect so. If you create a failing unittest that I could try? Also, does the segfault contain a usable back trace (using gdb)? That might give some insights into which code is failing. /Anders ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-05 9:14 ` Anders Fugmann @ 2014-12-05 14:38 ` Kenneth Adam Miller 2014-12-08 18:11 ` Kenneth Adam Miller 0 siblings, 1 reply; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-05 14:38 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 1556 bytes --] Yes, I'll try and recreate it for you. No, the backtrace in gdb is useless. All it says is: #0 0x0000000000843033 in caml_c_call () #1 0x0000000000000000 in ?? () On Fri, Dec 5, 2014 at 4:14 AM, Anders Fugmann <anders@fugmann.net> wrote: > On 12/04/2014 10:48 PM, Kenneth Adam Miller wrote: > >> Well I am just no thorough and you are correct. >> >> The sending of data over a zmq socket and the conversion of that data >> from string to protobuf encoded string all occurred in one line. One I >> added a print statement and then segregated them more cleanly, I can see >> that it is most certainly the line that converts to protobuf. >> >> The exact function that fails (on my end, could be deeper within this) >> is to_pb from here: >> >> https://github.com/argp/bap/blob/master/ocaml/piqi/ast_piqi.ml#L186 >> >> In any case, I did a test, and in my first function when to_pb gets >> called the first time and succeeds, I added an additional call to it... >> which also succeeded. But then in a subsequent unit test, the one that >> has been failing, still segfaults. >> >> If I turn off the tests prior to the segfaulting test, to_pb works in >> this particular run. But if the tests run before hand, something goes >> awry between the tests. Is it possible that to_pb is using some shared >> state between calls? >> > > I would not expect so. > > If you create a failing unittest that I could try? > > Also, does the segfault contain a usable back trace (using gdb)? That > might give some insights into which code is failing. > > /Anders > > > [-- Attachment #2: Type: text/html, Size: 2288 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-05 14:38 ` Kenneth Adam Miller @ 2014-12-08 18:11 ` Kenneth Adam Miller 2014-12-08 18:16 ` Yotam Barnoy 0 siblings, 1 reply; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-08 18:11 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 2315 bytes --] While reproducing it, I found that in the bap/ocaml directory's input.ml, there is a mutable list that is being updated by functors in speclist when parse_argv or parse is called; it retains the old list between calls to my function. So I need to reset it. (line 6 at https://github.com/argp/bap/blob/master/ocaml/input.ml) But now I get a strange compiler error! I don't know how ocaml could be such a hard language to use... Input.inputs:=ref []; Error: Unbound value Input.inputs But you can know that I have included the ocaml directory and linked it correct, since using Input.get_program already worked... On Fri, Dec 5, 2014 at 9:38 AM, Kenneth Adam Miller < kennethadammiller@gmail.com> wrote: > Yes, I'll try and recreate it for you. > > No, the backtrace in gdb is useless. All it says is: > #0 0x0000000000843033 in caml_c_call () > #1 0x0000000000000000 in ?? () > > On Fri, Dec 5, 2014 at 4:14 AM, Anders Fugmann <anders@fugmann.net> wrote: > >> On 12/04/2014 10:48 PM, Kenneth Adam Miller wrote: >> >>> Well I am just no thorough and you are correct. >>> >>> The sending of data over a zmq socket and the conversion of that data >>> from string to protobuf encoded string all occurred in one line. One I >>> added a print statement and then segregated them more cleanly, I can see >>> that it is most certainly the line that converts to protobuf. >>> >>> The exact function that fails (on my end, could be deeper within this) >>> is to_pb from here: >>> >>> https://github.com/argp/bap/blob/master/ocaml/piqi/ast_piqi.ml#L186 >>> >>> In any case, I did a test, and in my first function when to_pb gets >>> called the first time and succeeds, I added an additional call to it... >>> which also succeeded. But then in a subsequent unit test, the one that >>> has been failing, still segfaults. >>> >>> If I turn off the tests prior to the segfaulting test, to_pb works in >>> this particular run. But if the tests run before hand, something goes >>> awry between the tests. Is it possible that to_pb is using some shared >>> state between calls? >>> >> >> I would not expect so. >> >> If you create a failing unittest that I could try? >> >> Also, does the segfault contain a usable back trace (using gdb)? That >> might give some insights into which code is failing. >> >> /Anders >> >> >> > [-- Attachment #2: Type: text/html, Size: 3535 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-08 18:11 ` Kenneth Adam Miller @ 2014-12-08 18:16 ` Yotam Barnoy 2014-12-08 18:19 ` Kenneth Adam Miller 0 siblings, 1 reply; 14+ messages in thread From: Yotam Barnoy @ 2014-12-08 18:16 UTC (permalink / raw) To: Kenneth Adam Miller; +Cc: caml users [-- Attachment #1: Type: text/plain, Size: 2536 bytes --] You didn't export inputs in Input.mli. -Yotam On Mon, Dec 8, 2014 at 1:11 PM, Kenneth Adam Miller < kennethadammiller@gmail.com> wrote: > While reproducing it, I found that in the bap/ocaml directory's input.ml, > there is a mutable list that is being updated by functors in speclist when > parse_argv or parse is called; it retains the old list between calls to my > function. So I need to reset it. > (line 6 at https://github.com/argp/bap/blob/master/ocaml/input.ml) > > But now I get a strange compiler error! I don't know how ocaml could be > such a hard language to use... > > Input.inputs:=ref []; > > Error: Unbound value Input.inputs > > But you can know that I have included the ocaml directory and linked it > correct, since using Input.get_program already worked... > > On Fri, Dec 5, 2014 at 9:38 AM, Kenneth Adam Miller < > kennethadammiller@gmail.com> wrote: > >> Yes, I'll try and recreate it for you. >> >> No, the backtrace in gdb is useless. All it says is: >> #0 0x0000000000843033 in caml_c_call () >> #1 0x0000000000000000 in ?? () >> >> On Fri, Dec 5, 2014 at 4:14 AM, Anders Fugmann <anders@fugmann.net> >> wrote: >> >>> On 12/04/2014 10:48 PM, Kenneth Adam Miller wrote: >>> >>>> Well I am just no thorough and you are correct. >>>> >>>> The sending of data over a zmq socket and the conversion of that data >>>> from string to protobuf encoded string all occurred in one line. One I >>>> added a print statement and then segregated them more cleanly, I can see >>>> that it is most certainly the line that converts to protobuf. >>>> >>>> The exact function that fails (on my end, could be deeper within this) >>>> is to_pb from here: >>>> >>>> https://github.com/argp/bap/blob/master/ocaml/piqi/ast_piqi.ml#L186 >>>> >>>> In any case, I did a test, and in my first function when to_pb gets >>>> called the first time and succeeds, I added an additional call to it... >>>> which also succeeded. But then in a subsequent unit test, the one that >>>> has been failing, still segfaults. >>>> >>>> If I turn off the tests prior to the segfaulting test, to_pb works in >>>> this particular run. But if the tests run before hand, something goes >>>> awry between the tests. Is it possible that to_pb is using some shared >>>> state between calls? >>>> >>> >>> I would not expect so. >>> >>> If you create a failing unittest that I could try? >>> >>> Also, does the segfault contain a usable back trace (using gdb)? That >>> might give some insights into which code is failing. >>> >>> /Anders >>> >>> >>> >> > [-- Attachment #2: Type: text/html, Size: 4057 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Caml-list] Potential OCaml-ZMQ memory management problems 2014-12-08 18:16 ` Yotam Barnoy @ 2014-12-08 18:19 ` Kenneth Adam Miller 0 siblings, 0 replies; 14+ messages in thread From: Kenneth Adam Miller @ 2014-12-08 18:19 UTC (permalink / raw) To: caml users [-- Attachment #1: Type: text/plain, Size: 2919 bytes --] Excellent call. I find it is better to just update inputs in get_program and do a push request. It doesn't affect any existing program adversely and will only help others in the instance they reuse the function as I am. On Mon, Dec 8, 2014 at 1:16 PM, Yotam Barnoy <yotambarnoy@gmail.com> wrote: > You didn't export inputs in Input.mli. > > -Yotam > > On Mon, Dec 8, 2014 at 1:11 PM, Kenneth Adam Miller < > kennethadammiller@gmail.com> wrote: > >> While reproducing it, I found that in the bap/ocaml directory's input.ml, >> there is a mutable list that is being updated by functors in speclist when >> parse_argv or parse is called; it retains the old list between calls to my >> function. So I need to reset it. >> (line 6 at https://github.com/argp/bap/blob/master/ocaml/input.ml) >> >> But now I get a strange compiler error! I don't know how ocaml could be >> such a hard language to use... >> >> Input.inputs:=ref []; >> >> Error: Unbound value Input.inputs >> >> But you can know that I have included the ocaml directory and linked it >> correct, since using Input.get_program already worked... >> >> On Fri, Dec 5, 2014 at 9:38 AM, Kenneth Adam Miller < >> kennethadammiller@gmail.com> wrote: >> >>> Yes, I'll try and recreate it for you. >>> >>> No, the backtrace in gdb is useless. All it says is: >>> #0 0x0000000000843033 in caml_c_call () >>> #1 0x0000000000000000 in ?? () >>> >>> On Fri, Dec 5, 2014 at 4:14 AM, Anders Fugmann <anders@fugmann.net> >>> wrote: >>> >>>> On 12/04/2014 10:48 PM, Kenneth Adam Miller wrote: >>>> >>>>> Well I am just no thorough and you are correct. >>>>> >>>>> The sending of data over a zmq socket and the conversion of that data >>>>> from string to protobuf encoded string all occurred in one line. One I >>>>> added a print statement and then segregated them more cleanly, I can >>>>> see >>>>> that it is most certainly the line that converts to protobuf. >>>>> >>>>> The exact function that fails (on my end, could be deeper within this) >>>>> is to_pb from here: >>>>> >>>>> https://github.com/argp/bap/blob/master/ocaml/piqi/ast_piqi.ml#L186 >>>>> >>>>> In any case, I did a test, and in my first function when to_pb gets >>>>> called the first time and succeeds, I added an additional call to it... >>>>> which also succeeded. But then in a subsequent unit test, the one that >>>>> has been failing, still segfaults. >>>>> >>>>> If I turn off the tests prior to the segfaulting test, to_pb works in >>>>> this particular run. But if the tests run before hand, something goes >>>>> awry between the tests. Is it possible that to_pb is using some shared >>>>> state between calls? >>>>> >>>> >>>> I would not expect so. >>>> >>>> If you create a failing unittest that I could try? >>>> >>>> Also, does the segfault contain a usable back trace (using gdb)? That >>>> might give some insights into which code is failing. >>>> >>>> /Anders >>>> >>>> >>>> >>> >> > [-- Attachment #2: Type: text/html, Size: 4734 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2014-12-08 18:19 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-12-04 6:09 [Caml-list] Potential OCaml-ZMQ memory management problems Kenneth Adam Miller 2014-12-04 7:55 ` Anders Fugmann 2014-12-04 8:02 ` Kenneth Adam Miller 2014-12-04 9:59 ` Anders Fugmann 2014-12-04 10:04 ` Kenneth Adam Miller 2014-12-04 16:39 ` Kenneth Adam Miller 2014-12-04 16:45 ` Kenneth Adam Miller 2014-12-04 19:36 ` Anders Peter Fugmann 2014-12-04 21:48 ` Kenneth Adam Miller 2014-12-05 9:14 ` Anders Fugmann 2014-12-05 14:38 ` Kenneth Adam Miller 2014-12-08 18:11 ` Kenneth Adam Miller 2014-12-08 18:16 ` Yotam Barnoy 2014-12-08 18:19 ` Kenneth Adam Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox