Bug 2367454

Summary: python-crick fails to build with Python 3.14: crick/tests/test_space_saving.py::test_merge_algorithm[s111-s211] Fatal Python error: Segmentation fault
Product: [Fedora] Fedora Reporter: Karolina Surma <ksurma>
Component: python-crickAssignee: Sandro <gui1ty>
Status: CLOSED WORKSFORME QA Contact:
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: code, fti-bugs, gui1ty, ksurma, loganjerry, mhroncok, quantum.analyst, vstinner
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: python-crick-0.0.8-6.fc43 Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2025-08-01 16:12:35 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2322407, 2339432, 2339435, 2371852, 2371862    

Description Karolina Surma 2025-05-20 11:36:03 UTC
python-crick fails to build with Python 3.14.0b1.

This report is automated and not very verbose, but we'll try to get back here with details.

crick/tests/test_space_saving.py::test_merge_algorithm[s111-s211] Fatal Python error: Segmentation fault

https://docs.python.org/3.14/whatsnew/3.14.html

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.14-b1/fedora-rawhide-x86_64/09062430-python-crick/

For all our attempts to build python-crick with Python 3.14, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.14-b1/package/python-crick/

Testing and mass rebuild of packages is happening in copr.
You can follow these instructions to test locally in mock if your package builds with Python 3.14:
https://copr.fedorainfracloud.org/coprs/g/python/python3.14-b1/

Let us know here if you have any questions.

Python 3.14 is planned to be included in Fedora 43.
To make that update smoother, we're building Fedora packages with all pre-releases of Python 3.14.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires),
so if this package is required a lot, it's important for us to get it fixed soon.

We'd appreciate help from the people who know this package best,
but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 1 Karolina Surma 2025-06-11 15:58:07 UTC
*** Bug 2371847 has been marked as a duplicate of this bug. ***

Comment 2 Elliott Sales de Andrade 2025-06-12 05:36:19 UTC
The full trasceback with debug symbols is:

(gdb) bt full
#0  _PyFreeList_PopNoStats (fl=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Include/internal/pycore_freelist.h:79
        obj = 0xffffffff
#1  _PyFreeList_Pop (fl=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Include/internal/pycore_freelist.h:88
        op = <optimized out>
#2  PyFloat_FromDouble (fval=0.00040049338713288307) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/floatobject.c:126
        op = <optimized out>
#3  _PyFloat_FromDouble_ConsumeInputs (left=..., right=..., value=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/floatobject.c:142
No locals.
#4  0x00007ffff79701bb in _PyEval_EvalFrameDefault (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, frame=0x7ffff7e1fe20, throwflag=-798002704) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/generated_cases.c.h:1036
        left_o = <optimized out>
        right_o = <optimized out>
        dres = 0.00040049338713288307
        value = <optimized out>
        this_instr = <optimized out>
        left = <optimized out>
        right = <optimized out>
        res = <optimized out>
        opcode = <optimized out>
        oparg = 10
        entry = {frame = {f_executable = {bits = 140737351188993}, previous = 0x7ffff7e1f8e0, f_funcobj = {bits = 93824994576032}, f_globals = 0x7fff00000001, f_builtins = 0x1, f_locals = 0x1, frame_obj = 0x7ffff7144040, 
            instr_ptr = 0x7ffff7c1a202 <_Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS+2>, stackpointer = 0x7fffffffcb38, return_offset = 0, owner = 3 '\003', visited = 0 '\000', localsplus = {{bits = 1}}}, stack = {{bits = 1}}}
        next_instr = <optimized out>
        stack_pointer = <optimized out>
        exception_unwind = <optimized out>
        enter_tier_two = <optimized out>
        dying = <optimized out>
        __func__ = "_PyEval_EvalFrameDefault"
        opcode_targets = {...}
        word = <optimized out>
        word = <optimized out>
#5  0x00007ffff7968b85 in _PyEval_EvalFrame (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, frame=0x7ffff7e1f980, throwflag=0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Include/internal/pycore_ceval.h:119
No locals.
#6  _PyEval_Vector (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, func=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/ceval.c:1961
        total_args = 3
        stack_array = {{bits = 140737329299376}, {bits = 140736690128464}, {bits = 140736690128976}, {bits = 140737347445669}, {bits = 140737488342160}, {bits = 140737347133224}, {bits = 140737334227744}, {bits = 140737334227744}}
        arguments = 0x7fffffffcbe0
        frame = 0x7ffff7e1f980
#7  0x00007ffff7a53fa0 in _PyFunction_Vectorcall (func=0x7ffff7144040, stack=0x7ffff673a818, nargsf=9223372036854775809, kwnames=0x7fffd0069780) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:413
        f = 0x7ffff7144040
        nargs = 1
        tstate = <optimized out>
#8  _PyObject_VectorcallDictTstate (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff7144040, args=<optimized out>, nargsf=1, kwargs=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:146
        kwnames = 0x7fffd0069780
        newargs = 0x7ffff673a818
        nargs = <optimized out>
        func = 0x7ffff799e120 <_PyFunction_Vectorcall>
        res = <optimized out>
#9  0x00007ffff7aaee76 in _PyObject_Call_Prepend (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff7144040, obj=0x7ffff684ffb0, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwargs=0x7fffd020b8c0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:504
        small_stack = {0x7ffff684ffb0, 0x7ffff684ffb0, 0x7fffffffcd60, 0x7ffff798d14e <_PyDict_FromItems.constprop.0+366>, 0x7ffff684ffb0}
        stack = 0x7fffffffcd00
        argcount = 0
        result = <optimized out>
#10 call_method (self=0x7ffff684ffb0, attr=<optimized out>, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwds=0x7fffd020b8c0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/typeobject.c:2919
        meth = 0x7ffff7144040
        tstate = 0x7ffff7da61f8 <_PyRuntime+315512>
        cref = <optimized out>
        res = 0x0
        unbound = <optimized out>
#11 slot_tp_call (self=0x7ffff684ffb0, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwds=0x7fffd020b8c0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/typeobject.c:10181
No locals.
#12 0x00007ffff795447c in _PyObject_MakeTpCall (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff684ffb0, args=0x7fffffffcfc8, nargs=<optimized out>, keywords=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:242
        call = <optimized out>
        argstuple = <optimized out>
        kwdict = <optimized out>
        result = 0x0
#13 0x00007ffff797227a in _PyEval_EvalFrameDefault (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, frame=0x7ffff7e1f8e0, throwflag=-798002704) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/generated_cases.c.h:3227
        arguments = 0xffffffff
        kwnames_o = <optimized out>
        callable_o = <optimized out>
        res_o = <optimized out>
        tmp = {bits = 140736690352625}
        tmp = <optimized out>
        total_args = -798002704
        args_o_temp = {0x7ffff66a8350, 0x7fffd06c0650, 0x7fffd06c0850, 0x7ffff7d256c0 <_Py_FalseStruct>, 0x0, 0x1, 0x1, 0x7ffff7115c60, 0x7fffffffd0c0, 0x7ffff796b7b8 <initialize_locals+984>, 0x7ffff625fb80}
        args_o = <optimized out>
        positional_args = -798002704
        _i = <optimized out>
        callable = <optimized out>
        self_or_null = <optimized out>
        this_instr = <optimized out>
        args = 0x7ffff7e1f968
        kwnames = <optimized out>
        res = <optimized out>
        opcode = <optimized out>
        oparg = 10
        entry = {frame = {f_executable = {bits = 140737351188993}, previous = 0x7ffff7e1f5e0, f_funcobj = {bits = 93824994576032}, f_globals = 0x7fff00000001, f_builtins = 0x1, f_locals = 0x1, frame_obj = 0x7ffff7144040, 
            instr_ptr = 0x7ffff7c1a202 <_Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS+2>, stackpointer = 0x7fffffffd078, return_offset = 0, owner = 3 '\003', visited = 0 '\000', localsplus = {{bits = 1}}}, stack = {{bits = 1}}}
        next_instr = <optimized out>
        stack_pointer = <optimized out>
        exception_unwind = <optimized out>
        enter_tier_two = <optimized out>
        dying = <optimized out>
        __func__ = "_PyEval_EvalFrameDefault"
        opcode_targets = {...}
        word = <optimized out>
        word = <optimized out>
#14 0x00007ffff7968b85 in _PyEval_EvalFrame (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, frame=0x7ffff7e1f660, throwflag=0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Include/internal/pycore_ceval.h:119
No locals.
#15 _PyEval_Vector (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, func=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/ceval.c:1961
        total_args = 2
        stack_array = {{bits = 140737329463520}, {bits = 140737327563600}, {bits = 1}, {bits = 8091417940339733504}, {bits = 140737488343504}, {bits = 140737351672312}, {bits = 140737334227744}, {bits = 140737334227744}}
        arguments = 0x7fffffffd120
        frame = 0x7ffff7e1f660
#16 0x00007ffff7a53fa0 in _PyFunction_Vectorcall (func=0x7ffff7144040, stack=0x7fffd093b598, nargsf=9223372036854775809, kwnames=0x7ffff625fb80) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:413
        f = 0x7ffff7144040
        nargs = 1
        tstate = <optimized out>
#17 _PyObject_VectorcallDictTstate (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff7144040, args=<optimized out>, nargsf=1, kwargs=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:146
        kwnames = 0x7ffff625fb80
        newargs = 0x7fffd093b598
        nargs = <optimized out>
        func = 0x7ffff799e120 <_PyFunction_Vectorcall>
        res = <optimized out>
#18 0x00007ffff7aaee76 in _PyObject_Call_Prepend (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff7144040, obj=0x7ffff68780e0, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwargs=0x7ffff6281dc0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:504
        small_stack = {0x7ffff68780e0, 0x7fffffffd508, 0x7fffffffd2a0, 0x7ffff798d14e <_PyDict_FromItems.constprop.0+366>, 0x7fffffffd290}
        stack = 0x7fffffffd240
        argcount = 0
        result = <optimized out>
#19 call_method (self=0x7ffff68780e0, attr=<optimized out>, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwds=0x7ffff6281dc0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/typeobject.c:2919
        meth = 0x7ffff7144040
        tstate = 0x7ffff7da61f8 <_PyRuntime+315512>
        cref = <optimized out>
        res = 0x0
        unbound = <optimized out>
#20 slot_tp_call (self=0x7ffff68780e0, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwds=0x7ffff6281dc0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/typeobject.c:10181
No locals.
#21 0x00007ffff795447c in _PyObject_MakeTpCall (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff68780e0, args=0x7fffffffd508, nargs=<optimized out>, keywords=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:242
        call = <optimized out>
        argstuple = <optimized out>
        kwdict = <optimized out>
        result = 0x0
#22 0x00007ffff797b194 in _PyEval_EvalFrameDefault (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, frame=0x7ffff7e1f5e0, throwflag=-798002704) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/generated_cases.c.h:2959
        callable_o = <optimized out>
        total_args = -136907912
        err = <optimized out>
        arguments = 0x7fffd06f71f1
        args_o_temp = {0x7ffff650b620, 0x7ffff66a8350, 0x7ffff6f28a70, 0x7ffff69474d0, 0x7ffff7d30200 <_Py_NoneStruct>, 0x7ffff7d30200 <_Py_NoneStruct>, 0x555555732f80, 0x7ffff7d256c0 <_Py_FalseStruct>, 0x7ffff71c9490, 0x7ffff796b7b8 <initialize_locals+984>, 0x7ffff672d640}
        args_o = <optimized out>
        arg = <optimized out>
        op = <optimized out>
        tracer = <optimized out>
        tmp = {bits = 140736690352625}
        _tmp_op_ptr = <optimized out>
        data = <optimized out>
        _i = <optimized out>
        kwnames_o = <optimized out>
        positional_args = -136998528
        res_o = <optimized out>
        _tmp_old_op = <optimized out>
        dealloc = <optimized out>
        callable = <optimized out>
        self_or_null = <optimized out>
        this_instr = 0x1
        args = <optimized out>
        kwnames = <optimized out>
        res = <optimized out>
        opcode = <optimized out>
        oparg = 10
        entry = {frame = {f_executable = {bits = 140737351188993}, previous = 0x7ffff7e1f130, f_funcobj = {bits = 93824994576032}, f_globals = 0x7fff00000001, f_builtins = 0x1, f_locals = 0x1, frame_obj = 0x7ffff7144040, 
            instr_ptr = 0x7ffff7c1a202 <_Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS+2>, stackpointer = 0x7fffffffd5b8, return_offset = 0, owner = 3 '\003', visited = 0 '\000', localsplus = {{bits = 1}}}, stack = {{bits = 1}}}
        next_instr = <optimized out>
        stack_pointer = <optimized out>
        exception_unwind = <optimized out>
        enter_tier_two = <optimized out>
        dying = <optimized out>
        __func__ = "_PyEval_EvalFrameDefault"
        opcode_targets = {...}
        word = <optimized out>
        word = <optimized out>
#23 0x00007ffff7968b85 in _PyEval_EvalFrame (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, frame=0x7ffff7e1f218, throwflag=0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Include/internal/pycore_ceval.h:119
No locals.
#24 _PyEval_Vector (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, func=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/ceval.c:1961
        total_args = 2
        stack_array = {{bits = 140737329294576}, {bits = 140737329238032}, {bits = 1}, {bits = 140737351447416}, {bits = 140737351493136}, {bits = 140737351394600}, {bits = 1}, {bits = 140737488345672}}
        arguments = 0x7fffffffd660
        frame = 0x7ffff7e1f218
#25 0x00007ffff7a53fa0 in _PyFunction_Vectorcall (func=0x7ffff7144040, stack=0x7ffff66d0cb8, nargsf=9223372036854775809, kwnames=0x7ffff672d640) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:413
        f = 0x7ffff7144040
        nargs = 1
        tstate = <optimized out>
#26 _PyObject_VectorcallDictTstate (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff7144040, args=<optimized out>, nargsf=1, kwargs=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:146
        kwnames = 0x7ffff672d640
        newargs = 0x7ffff66d0cb8
        nargs = <optimized out>
        func = 0x7ffff799e120 <_PyFunction_Vectorcall>
        res = <optimized out>
#27 0x00007ffff7aaee76 in _PyObject_Call_Prepend (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff7144040, obj=0x7ffff684ecf0, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwargs=0x7ffff672e180) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:504
        small_stack = {0x7ffff684ecf0, 0x7fffffffda48, 0x7fffffffd7e0, 0x7ffff798d14e <_PyDict_FromItems.constprop.0+366>, 0x7fffffffd7d0}
        stack = 0x7fffffffd780
        argcount = 0
        result = <optimized out>
#28 call_method (self=0x7ffff684ecf0, attr=<optimized out>, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwds=0x7ffff672e180) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/typeobject.c:2919
        meth = 0x7ffff7144040
        tstate = 0x7ffff7da61f8 <_PyRuntime+315512>
        cref = <optimized out>
        res = 0x0
        unbound = <optimized out>
#29 slot_tp_call (self=0x7ffff684ecf0, args=0x7ffff7d6f308 <_PyRuntime+90504>, kwds=0x7ffff672e180) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/typeobject.c:10181
No locals.
#30 0x00007ffff795447c in _PyObject_MakeTpCall (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, callable=0x7ffff684ecf0, args=0x7fffffffda48, nargs=<optimized out>, keywords=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Objects/call.c:242
        call = <optimized out>
        argstuple = <optimized out>
        kwdict = <optimized out>
        result = 0x0
#31 0x00007ffff797b194 in _PyEval_EvalFrameDefault (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, frame=0x7ffff7e1f130, throwflag=-798002704) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/generated_cases.c.h:2959
        callable_o = <optimized out>
        total_args = -136907912
        err = <optimized out>
        arguments = 0x7fffd06f71f1
        args_o_temp = {0x7ffff66dba60, 0x7ffff6841010, 0x7ffff75e4f40, 0x7ffff66f3080, 0x7ffff7d30200 <_Py_NoneStruct>, 0x7ffff7d30200 <_Py_NoneStruct>, 0x555555732f80, 0x7ffff7d256c0 <_Py_FalseStruct>, 0x7ffff71c9490, 0x7ffff75299b0, 0x0}
        args_o = <optimized out>
        arg = <optimized out>
        op = <optimized out>
        tracer = <optimized out>
        tmp = {bits = 140736690352625}
        _tmp_op_ptr = <optimized out>
        data = <optimized out>
        _i = <optimized out>
        kwnames_o = <optimized out>
        positional_args = -136998528
        res_o = <optimized out>
        _tmp_old_op = <optimized out>
        dealloc = <optimized out>
        callable = <optimized out>
        self_or_null = <optimized out>
        this_instr = 0x1
        args = <optimized out>
        kwnames = <optimized out>
        res = <optimized out>
        opcode = <optimized out>
        oparg = 10
        entry = {frame = {f_executable = {bits = 140737351188993}, previous = 0x0, f_funcobj = {bits = 140737488345824}, f_globals = 0x7ffff768dad8 <_int_free_create_chunk+136>, f_builtins = 0x7ffff7da61f8 <_PyRuntime+315512>, f_locals = 0x1fd, frame_obj = 0x7fffffffdb00, 
            instr_ptr = 0x7ffff7c1a202 <_Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS+2>, stackpointer = 0x7fffffffdaf8, return_offset = 0, owner = 3 '\003', visited = 0 '\000', localsplus = {{bits = 1}}}, stack = {{bits = 1}}}
        next_instr = <optimized out>
        stack_pointer = <optimized out>
        exception_unwind = <optimized out>
        enter_tier_two = <optimized out>
        dying = <optimized out>
        __func__ = "_PyEval_EvalFrameDefault"
        opcode_targets = {...}
        word = <optimized out>
        word = <optimized out>
#32 0x00007ffff7968b85 in _PyEval_EvalFrame (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, frame=0x7ffff7e1f020, throwflag=0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Include/internal/pycore_ceval.h:119
No locals.
#33 _PyEval_Vector (tstate=0x7ffff7da61f8 <_PyRuntime+315512>, func=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/ceval.c:1961
        total_args = 0
        stack_array = {{bits = 140737488346080}, {bits = 140737347104513}, {bits = 140737341557904}, {bits = 8091417940339733504}, {bits = 140737351398568}, {bits = 140737488346160}, {bits = 140737341701952}, {bits = 140737351672312}}
        arguments = 0x7fffffffdba0
        frame = 0x7ffff7e1f020
#34 0x00007ffff7a55f57 in PyEval_EvalCode (co=0x7ffff754d3b0, globals=<optimized out>, locals=0x7ffff7423f40) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/ceval.c:853
        tstate = 0x7ffff7da61f8 <_PyRuntime+315512>
        builtins = 0x7ffff75b1e80
        desc = {fc_globals = 0x7ffff7423f40, fc_builtins = 0x7ffff75b1e80, fc_name = 0x7ffff7d61a20 <_PyRuntime+34976>, fc_qualname = 0x7ffff7d61a20 <_PyRuntime+34976>, fc_code = 0x7ffff754d3b0, fc_defaults = 0x0, fc_kwdefaults = 0x0, fc_closure = 0x0}
        func = 0x7ffff741b3d0
        res = <optimized out>
#35 0x00007ffff7a95867 in run_mod (mod=mod@entry=0x555555679980, filename=filename@entry=0x7ffff748edb0, globals=globals@entry=0x7ffff7423f40, locals=locals@entry=0x7ffff7423f40, flags=flags@entry=0x7fffffffde98, arena=arena@entry=0x7ffff752bc90, interactive_src=0x0, 
    generate_new_source=0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/pythonrun.c:1436
        tstate = 0x7ffff7da61f8 <_PyRuntime+315512>
        interactive_filename = <optimized out>
        co = 0x7ffff754d3b0
        v = <optimized out>
#36 0x00007ffff7a9640a in pyrun_file (fp=fp@entry=0x5555555582e0, filename=filename@entry=0x7ffff748edb0, start=start@entry=257, globals=globals@entry=0x7ffff7423f40, locals=locals@entry=0x7ffff7423f40, closeit=closeit@entry=1, flags=0x7fffffffde98)
    at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/pythonrun.c:1293
        arena = 0x7ffff752bc90
        mod = <optimized out>
        ret = <optimized out>
#37 0x00007ffff7a95244 in _PyRun_SimpleFileObject (fp=fp@entry=0x5555555582e0, filename=filename@entry=0x7ffff748edb0, closeit=closeit@entry=1, flags=flags@entry=0x7fffffffde98) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/pythonrun.c:521
        ret = <optimized out>
        main_module = 0x7ffff740e390
        dict = 0x7ffff7423f40
        set_file_name = 1
        has_file = <optimized out>
        pyc = <optimized out>
        v = <optimized out>
#38 0x00007ffff7a95065 in _PyRun_AnyFileObject (fp=0x5555555582e0, filename=0x7ffff748edb0, closeit=1, flags=0x7fffffffde98) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Python/pythonrun.c:81
        decref_filename = 0
        res = <optimized out>
#39 0x00007ffff7a4ae60 in pymain_run_file_obj (program_name=0x7ffff748edf0, filename=0x7ffff748edb0, skip_source_first_line=0) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Modules/main.c:410
        fp = <optimized out>
        sb = {st_dev = 41, st_ino = 27308020, st_nlink = 1, st_mode = 33261, st_uid = 0, st_gid = 0, __pad0 = 0, st_rdev = 0, st_size = 225, st_blksize = 4096, st_blocks = 8, st_atim = {tv_sec = 1749685365, tv_nsec = 744935796}, st_mtim = {tv_sec = 1748822400, tv_nsec = 0}, 
          st_ctim = {tv_sec = 1749685249, tv_nsec = 875740228}, __glibc_reserved = {0, 0, 0}}
        cf = {cf_flags = 0, cf_feature_version = 14}
        run = <optimized out>
#40 pymain_run_file (config=0x7ffff7d712c0 <_PyRuntime+98624>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Modules/main.c:429
        filename = 0x7ffff748edb0
        program_name = 0x7ffff748edf0
        res = <optimized out>
#41 pymain_run_python (exitcode=0x7fffffffde8c) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Modules/main.c:694
        main_importer_path = <optimized out>
        interp = 0x7ffff7d6f378 <_PyRuntime+90616>
        config = 0x7ffff7d712c0 <_PyRuntime+98624>
        path0 = 0x7ffff748e8b0
#42 Py_RunMain () at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Modules/main.c:775
        exitcode = 0
#43 0x00007ffff7a44e3b in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/python3.14-3.14.0~b2-3.fc43.x86_64/Modules/main.c:829
        args = {argc = 3, use_bytes_argv = 1, bytes_argv = 0x7fffffffe0f8, wchar_argv = 0x0}
#44 0x00007ffff76125b5 in __libc_start_call_main (main=main@entry=0x5555555544a0 <main>, argc=argc@entry=3, argv=argv@entry=0x7fffffffe0f8) at ../sysdeps/nptl/libc_start_call_main.h:58
        self = <optimized out>
        result = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, -3559646065537008828, 140737488347384, 3, 140737354125312, 93824992243056, -3559646066658985148, -3559662302490608828}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x7fffffffe0f8}, data = {prev = 0x0, cleanup = 0x0, 
              canceltype = 0}}}
        not_first_call = <optimized out>
#45 0x00007ffff7612668 in __libc_start_main_impl (main=0x5555555544a0 <main>, argc=3, argv=0x7fffffffe0f8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe0e8) at ../csu/libc-start.c:360
No locals.
#46 0x00005555555543d5 in _start ()
No symbol table info available.

And valgrind also shows something interesting:

crick/tests/test_space_saving.py::test_weights ==33== Invalid write of size 8
==33==    at 0x499CE91: UnknownInlinedFun (pycore_gc.h:247)
==33==    by 0x499CE91: PyList_New (listobject.c:270)
==33==    by 0x4AF267B: _PyType_GetSubclasses (typeobject.c:672)
==33==    by 0x49B1CDC: _PyObject_VectorcallTstate.lto_priv.0 (pycore_call.h:169)
==33==    by 0x4AC3789: PyObject_CallMethod (call.c:645)
==33==    by 0x4AF235E: UnknownInlinedFun (_abc.c:804)
==33==    by 0x4AF235E: _abc__abc_subclasscheck.lto_priv.0 (_abc.c.h:137)
==33==    by 0x49CF80A: _PyEval_EvalFrameDefault (generated_cases.c.h:2263)
==33==    by 0x49CAB84: UnknownInlinedFun (pycore_ceval.h:119)
==33==    by 0x49CAB84: _PyEval_Vector (ceval.c:1961)
==33==    by 0x4A44D5E: UnknownInlinedFun (call.c:413)
==33==    by 0x4A44D5E: UnknownInlinedFun (pycore_call.h:169)
==33==    by 0x4A44D5E: method_vectorcall.lto_priv.0 (classobject.c:64)
==33==    by 0x4A0550E: UnknownInlinedFun (pycore_call.h:169)
==33==    by 0x4A0550E: PyObject_CallOneArg (call.c:395)
==33==    by 0x4A27D7C: object_issubclass.lto_priv.0 (abstract.c:2766)
==33==    by 0x4AF23E1: UnknownInlinedFun (_abc.c:817)
==33==    by 0x4AF23E1: _abc__abc_subclasscheck.lto_priv.0 (_abc.c.h:137)
==33==    by 0x49CF80A: _PyEval_EvalFrameDefault (generated_cases.c.h:2263)
==33==  Address 0x2e5ce62f is 1 bytes before a block of size 56 alloc'd
==33==    at 0x4843B26: malloc (vg_replace_malloc.c:446)
==33==    by 0x49A4E1D: UnknownInlinedFun (obmalloc.c:63)
==33==    by 0x49A4E1D: UnknownInlinedFun (obmalloc.c:966)
==33==    by 0x49A4E1D: UnknownInlinedFun (obmalloc.c:2234)
==33==    by 0x49A4E1D: UnknownInlinedFun (obmalloc.c:1394)
==33==    by 0x49A4E1D: UnknownInlinedFun (pycore_object_alloc.h:46)
==33==    by 0x49A4E1D: _PyType_AllocNoTrack (typeobject.c:2347)
==33==    by 0x4A3C2F6: UnknownInlinedFun (typeobject.c:2378)
==33==    by 0x4A3C2F6: list_vectorcall.lto_priv.0 (listobject.c:3515)
==33==    by 0x49D0E94: _PyEval_EvalFrameDefault (generated_cases.c.h:2150)
==33==    by 0x49CAB84: UnknownInlinedFun (pycore_ceval.h:119)
==33==    by 0x49CAB84: _PyEval_Vector (ceval.c:1961)
==33==    by 0x4AB5F9F: UnknownInlinedFun (call.c:413)
==33==    by 0x4AB5F9F: _PyObject_VectorcallDictTstate (call.c:146)
==33==    by 0x4B10E75: UnknownInlinedFun (call.c:504)
==33==    by 0x4B10E75: UnknownInlinedFun (typeobject.c:2919)
==33==    by 0x4B10E75: slot_tp_call.lto_priv.0 (typeobject.c:10181)
==33==    by 0x4AC9D39: _PyObject_Call (call.c:361)
==33==    by 0x49D3F24: UnknownInlinedFun (call.c:373)
==33==    by 0x49D3F24: UnknownInlinedFun (call.c:381)
==33==    by 0x49D3F24: _PyEval_EvalFrameDefault (generated_cases.c.h:2654)
==33==    by 0x49CAB84: UnknownInlinedFun (pycore_ceval.h:119)
==33==    by 0x49CAB84: _PyEval_Vector (ceval.c:1961)
==33==    by 0x4AB5F9F: UnknownInlinedFun (call.c:413)
==33==    by 0x4AB5F9F: _PyObject_VectorcallDictTstate (call.c:146)
==33==    by 0x4B10E75: UnknownInlinedFun (call.c:504)
==33==    by 0x4B10E75: UnknownInlinedFun (typeobject.c:2919)
==33==    by 0x4B10E75: slot_tp_call.lto_priv.0 (typeobject.c:10181)
==33== 
==33== Invalid read of size 1
==33==    at 0x49AF3B0: PyList_Append (listobject.c:534)
==33==    by 0x4AF2712: _PyType_GetSubclasses (typeobject.c:693)
==33==    by 0x49B1CDC: _PyObject_VectorcallTstate.lto_priv.0 (pycore_call.h:169)
==33==    by 0x4AC3789: PyObject_CallMethod (call.c:645)
==33==    by 0x4AF235E: UnknownInlinedFun (_abc.c:804)
==33==    by 0x4AF235E: _abc__abc_subclasscheck.lto_priv.0 (_abc.c.h:137)
==33==    by 0x49CF80A: _PyEval_EvalFrameDefault (generated_cases.c.h:2263)
==33==    by 0x49CAB84: UnknownInlinedFun (pycore_ceval.h:119)
==33==    by 0x49CAB84: _PyEval_Vector (ceval.c:1961)
==33==    by 0x4A44D5E: UnknownInlinedFun (call.c:413)
==33==    by 0x4A44D5E: UnknownInlinedFun (pycore_call.h:169)
==33==    by 0x4A44D5E: method_vectorcall.lto_priv.0 (classobject.c:64)
==33==    by 0x4A0550E: UnknownInlinedFun (pycore_call.h:169)
==33==    by 0x4A0550E: PyObject_CallOneArg (call.c:395)
==33==    by 0x4A27D7C: object_issubclass.lto_priv.0 (abstract.c:2766)
==33==    by 0x4AF23E1: UnknownInlinedFun (_abc.c:817)
==33==    by 0x4AF23E1: _abc__abc_subclasscheck.lto_priv.0 (_abc.c.h:137)
==33==    by 0x49CF80A: _PyEval_EvalFrameDefault (generated_cases.c.h:2263)
==33==  Address 0x4d8c8a0ab is not stack'd, malloc'd or (recently) free'd
==33==

I don't know if that is a Python bug, or Cython bug.

Comment 3 Victor Stinner 2025-06-12 14:00:47 UTC
> I don't know if that is a Python bug, or Cython bug.

It's a memory corruption in __pyx_tp_dealloc_5crick_12space_saving_SpaceSaving() function: function generated by Cython. It's not a bug in Python.

I suppose that it's this code from crick/space_saving.pyx:
---
cdef class SpaceSaving:
    ...
    def __dealloc__(self):
        if self.summary != NULL:
            if np.PyDataType_ISOBJECT(self.dtype):
                spsv_object_free(<spsv_object_t *>self.summary)
            else:
                spsv_int64_free(<spsv_int64_t *>self.summary)
---

I suppose that it's a "use-after-free" bug. It's tedious to debug the bug, so it's hard to give more hints.

gdb traces:
---
Hardware watchpoint 6: *(void**)((PyThreadState *) 0xb2c6a8)->interp->object_state.freelists.floats.freelist

Old value = (void *) 0x0
New value = (void *) 0xffffffff

0x00007fedf648fa41 in __pyx_tp_dealloc_5crick_12space_saving_SpaceSaving ()
   from /builddir/build/BUILD/python-crick-0.0.8-build/crick-0.0.8/crick/space_saving.cpython-314-x86_64-linux-gnu.so
---

Comment 4 Victor Stinner 2025-06-12 15:29:45 UTC
I tried but failed to debug the Cython issue. What helped me is to replace these 4 lines in setup.py to get debug symbols:
---
if True: #"--debug" in sys.argv:
    #sys.argv.remove("--debug")
    compile_args["undef_macros"] = ["NDEBUG"]
    compile_args["extra_compile_args"] = ["-O0", "-g"]
---

It's not trivial to install crick to run tests. I had to use the "hack" from the Fedora specfile:
---
$ cd crick
$ ln -s ../build/lib.linux-x86_64-cpython-314/crick/*so .
---

Otherwise, pytest doesn't find crick extensions such as crick.numpy_version.

Comment 5 Elliott Sales de Andrade 2025-06-15 01:21:23 UTC
Good spot; commenting out that whole `__dealloc__` does fix the crash, but then the ref count leak test fails (naturally).

I tried something like this, just in case `__dealloc__` was called twice, but that did not fix it:

diff --git a/crick/space_saving.pyx b/crick/space_saving.pyx
index 57d963a..83ef1fe 100644
--- a/crick/space_saving.pyx
+++ b/crick/space_saving.pyx
@@ -203,6 +203,7 @@ cdef class SpaceSaving:
                 spsv_object_free(<spsv_object_t *>self.summary)
             else:
                 spsv_int64_free(<spsv_int64_t *>self.summary)
+            self.summary = NULL
 
     def __repr__(self):
         return ("SpaceSaving<capacity={0}, dtype={1}, "

Comment 6 Ben Beasley 2025-06-15 12:18:22 UTC
I reproduced this in a virtualenv and reported it upstream as https://github.com/dask/crick/issues/65.

Comment 7 Fedora Fails To Install 2025-06-20 19:53:19 UTC
Hello,

Please note that this comment was generated automatically by https://pagure.io/releng/blob/main/f/scripts/ftbfs-fti/follow-policy.py
If you feel that this output has mistakes, please open an issue at https://pagure.io/releng/

This package fails to install and maintainers are advised to take one of the following actions:

 - Fix this bug and close this bugzilla once the update makes it to the repository.
   (The same script that posted this comment will eventually close this bugzilla
   when the fixed package reaches the repository, so you don't have to worry about it.)

or

 - Move this bug to ASSIGNED if you plan on fixing this, but simply haven't done so yet.

or

 - Orphan the package if you no longer plan to maintain it.


If you do not take one of these actions, the process at https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/#_package_removal_for_long_standing_ftbfs_and_fti_bugs will continue.
This package may be orphaned in 7+ weeks.
This is the first reminder (step 3) from the policy.

Don't hesitate to ask for help on https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/ if you are unsure how to fix this bug.

Comment 8 Jerry James 2025-07-07 21:48:56 UTC
It looks like a refcounting bug.  This patch leads to a successful build.  I'm not saying that it's the correct fix, mind you.

diff --git a/crick/space_saving.pyx b/crick/space_saving.pyx
index 57d963a..4bafbee 100644
--- a/crick/space_saving.pyx
+++ b/crick/space_saving.pyx
@@ -285,6 +285,7 @@ cdef class SpaceSaving:
         count = np.asarray(count)
 
         item = item.astype(self.dtype, casting='safe', copy=False)
+        Py_INCREF(<object>item)
         count = count.astype(np.int64, casting='safe', copy=False)
 
         if check_count and (count <= 0).any():

Comment 9 Jerry James 2025-07-14 23:18:45 UTC
I submitted an upstream PR to address what I believe the issue to be (explanation in the PR): https://github.com/dask/crick/pull/69.

Here is a PR for the Fedora package to add the patch, which leads to a successful Rawhide build: https://src.fedoraproject.org/rpms/python-crick/pull-request/3

Comment 10 Fedora Fails To Install 2025-08-01 16:12:35 UTC
Hello,

Please note that this comment was generated automatically by https://pagure.io/releng/blob/main/f/scripts/ftbfs-fti/follow-policy.py
If you feel that this output has mistakes, please open an issue at https://pagure.io/releng/

All subpackages of a package against which this bug was filled are now installable or removed from Fedora 43.

Thanks for taking care of it!

Comment 11 Victor Stinner 2025-08-04 08:51:46 UTC
> I submitted an upstream PR to address what I believe the issue to be (explanation in the PR): https://github.com/dask/crick/pull/69.

Great!