So this seems to be caused by the variable in memory_pool.cc:

const util::optional<MemoryPoolBackend> user_selected_backend = UserSelectedBackend();

being (or becoming) garbage.

For some reason, after a few Gandiva batch evaluations user_selected_backend is no longer "jemalloc" but "system" (probably actually just null because "system" is 0) and after a while it isn't valid at all and crashes.

There aren't multiple copies of Arrow AFAICT but I do have two apps using arrow. Both use libarrow.a, libarrow-glib.a and libgandiva.a... one (that I'm not super familiar with) shows the above behavior and the other doesn't.


On 22/3/21 10:27 pm, Matt Youill wrote:
Could be the build creating multiple Arrows I suppose. It's a mixture of quite an old Makefile calling cmake to build arrow and arrow c lib.

Will double check.

Thanks, Matt

On Mon., 22 Mar. 2021, 9:35 pm Antoine Pitrou, <[email protected] <mailto:[email protected]>> wrote:

    On Mon, 22 Mar 2021 19:34:19 +1100
    Matt Youill <[email protected]
    <mailto:[email protected]>> wrote:
    > Hi,
    >
    > Not sure if anyone knows anything about this, but am getting a
    strange
    > error when evaluating a record batch with a gandiva filter...
    >
    > __GI_raise 0x00007f2b8f01718b
    > __GI_abort 0x00007f2b8eff6859
    > arrow::util::ArrowLog::~ArrowLog() 0x000056309fe94c12
    > arrow::default_memory_pool() 0x000056309fd6fff4
    > gandiva::Annotator::PrepareEvalBatch(arrow::RecordBatch const&,
    > std::vector<std::shared_ptr<arrow::ArrayData>,
    > std::allocator<std::shared_ptr<arrow::ArrayData> > > const&)
    > 0x000056309facdfce
    > gandiva::LLVMGenerator::Execute(arrow::RecordBatch const&,
    > std::vector<std::shared_ptr<arrow::ArrayData>,
    > std::allocator<std::shared_ptr<arrow::ArrayData> > > const&)
    > 0x000056309faa66a2
    > gandiva::Filter::Evaluate(arrow::RecordBatch const&,
    > std::shared_ptr<gandiva::SelectionVector>) 0x000056309fa9ea1d
    >
    >
    > The error reported is "Internal error: cannot create default
    memory pool"
    >
    > I'm using jemalloc
    >
    > Not even really sure how a call to arrow::default_memory_pool() can
    > fail? This is only occurring in a release build if that helps?

    This logically should not happen.  How did you compile Arrow and
    Gandiva?  Do you have two versions of Arrow lying around perhaps?



Reply via email to