On Monday, 10 July 2017 at 00:10:36 UTC, NoBigDeal256 wrote:
The error goes away. The error also goes away if ThingA.arrayOfThingBs returns a single instance of ThingB instead of an array of ThingB.

This tells me the problem is in the collection order at the end of the program.

The HTTP inside the struct inside the array gets cleaned up by the garbage collector (aka GC) at program termination... and it might be doing that AFTER unloading curl, leading to the segfault, OR it could be running some GC operation in the destructor, leading to InvalidMemoryOperationError (calling a GC function while the GC is running is not allowed). Which you get is apparently dependent on which system you are on, but both are wrong.

If it isn't in the array, the destructor gets called at scope exit, which happens before program termination and outside the GC, so everything happens as it is supposed to.


HTTP's innards have a RefCounted implementation which has a destructor that calls GC.removeRange. I *think* that can do the invalid mem operation. And the implementation itself can do curl_shutdown, which is your potential segfault.


So I'd say the answer is prolly to keep HTTP away from the GC. Manually free its arrays, or keep them outside arrays in the first place.

Reply via email to