Skip to content

GType memleak fixes

Marco Trevisan requested to merge 3v1n0/gjs:memleak-fixes into master

Running gjs-tests.gtester with asan enabled, we get these leaks:

Direct leak of 160 byte(s) in 20 object(s) allocated from:
    #0 0x7f6b0e37bb60 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xefb60)
    #1 0x7f6b0da6a103 in gjs_gtype_create_gtype_wrapper /media/M2/GNOME/gjs/gi/gtype.cpp:171
    #2 0x7f6b0d9d8a98 in gjs_value_from_g_argument /media/M2/GNOME/gjs/gi/arg.cpp:2712
    #3 0x7f6b0da30313 in gjs_invoke_c_function /media/M2/GNOME/gjs/gi/function.cpp:1155
    #4 0x7f6b0da339eb in function_call /media/M2/GNOME/gjs/gi/function.cpp:1413
    #5 0x7f6b0c7be163  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14f163)
    #6 0x7f6b0c7b1800  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x142800)
    #7 0x7f6b0c7bdaf5  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14eaf5)
    #8 0x7f6b0c7be0c0  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14f0c0)
    #9 0x7f6b0c7be328  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14f328)
    #10 0x7f6b0caf1ce0 in JS_CallFunctionValue(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x482ce0)
    #11 0x7f6b0db337a8 in resolve_namespace_object /media/M2/GNOME/gjs/gi/repo.cpp:135
    #12 0x7f6b0db35a9e in repo_resolve /media/M2/GNOME/gjs/gi/repo.cpp:189
    #13 0x7f6b0cbde53f  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x56f53f)
    #14 0x7f6b0c7a484e  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x13584e)
    #15 0x7f6b0c7b290f  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14390f)
    #16 0x7f6b0c7bdaf5  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14eaf5)
    #17 0x7f6b0c7bf63a  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x15063a)
    #18 0x7f6b0c7bf76b  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x15076b)
    #19 0x7f6b0cad20cd  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x4630cd)
    #20 0x7f6b0cad21da  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x4631da)
    #21 0x7f6b0dbd22a9 in gjs_eval_with_scope /media/M2/GNOME/gjs/gjs/jsapi-util.cpp:821
    #22 0x7f6b0db703b8 in gjs_context_eval /media/M2/GNOME/gjs/gjs/context.cpp:928
    #23 0x55a53ebd44f0 in gjstest_test_func_gjs_gobject_js_defined_type /media/M2/GNOME/gjs/test/gjs-tests.cpp:104
    #24 0x7f6b0d028f79 in test_case_run ../../glib/glib/gtestutils.c:2318
    #25 0x7f6b0d028f79 in g_test_run_suite_internal ../../glib/glib/gtestutils.c:2403

Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x7f6b0e37bb60 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xefb60)
    #1 0x7f6b0da6a103 in gjs_gtype_create_gtype_wrapper /media/M2/GNOME/gjs/gi/gtype.cpp:171
    #2 0x7f6b0d9d8a98 in gjs_value_from_g_argument /media/M2/GNOME/gjs/gi/arg.cpp:2712
    #3 0x7f6b0da30313 in gjs_invoke_c_function /media/M2/GNOME/gjs/gi/function.cpp:1155
    #4 0x7f6b0da339eb in function_call /media/M2/GNOME/gjs/gi/function.cpp:1413
    #5 0x10d462eb17c4  (<unknown module>)
    #6 0x621000bf80b7  (<unknown module>)
    #7 0x10d462ea94e7  (<unknown module>)
    #8 0x7f6b0c95f120  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x2f0120)
    #9 0x7f6b0c7b8cd8  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x149cd8)
    #10 0x7f6b0c7bdaf5  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14eaf5)
    #11 0x7f6b0c7be0c0  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14f0c0)
    #12 0x7f6b0c7be328  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14f328)
    #13 0x7f6b0caf1ce0 in JS_CallFunctionValue(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x482ce0)
    #14 0x7f6b0db337a8 in resolve_namespace_object /media/M2/GNOME/gjs/gi/repo.cpp:135
    #15 0x7f6b0db35a9e in repo_resolve /media/M2/GNOME/gjs/gi/repo.cpp:189
    #16 0x7f6b0cbde53f  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x56f53f)
    #17 0x7f6b0c7a484e  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x13584e)
    #18 0x7f6b0c7b290f  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14390f)
    #19 0x7f6b0c7bdaf5  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14eaf5)
    #20 0x7f6b0c7bf63a  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x15063a)
    #21 0x7f6b0c7bf76b  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x15076b)
    #22 0x7f6b0cad20cd  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x4630cd)
    #23 0x7f6b0cad21da  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x4631da)
    #24 0x7f6b0dbd22a9 in gjs_eval_with_scope /media/M2/GNOME/gjs/gjs/jsapi-util.cpp:821
    #25 0x7f6b0db703b8 in gjs_context_eval /media/M2/GNOME/gjs/gjs/context.cpp:928
    #26 0x55a53ebd44f0 in gjstest_test_func_gjs_gobject_js_defined_type /media/M2/GNOME/gjs/test/gjs-tests.cpp:104
    #27 0x7f6b0d028f79 in test_case_run ../../glib/glib/gtestutils.c:2318
    #28 0x7f6b0d028f79 in g_test_run_suite_internal ../../glib/glib/gtestutils.c:2403

Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x7f6b0e37bb60 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xefb60)
    #1 0x7f6b0da6a103 in gjs_gtype_create_gtype_wrapper /media/M2/GNOME/gjs/gi/gtype.cpp:171
    #2 0x7f6b0da9fcc0 in gjs_define_object_class /media/M2/GNOME/gjs/gi/object.cpp:2245
    #3 0x7f6b0db1ea5f in gjs_register_type /media/M2/GNOME/gjs/gi/private.cpp:305
    #4 0x7f6b0c7bdf2b  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14ef2b)
    #5 0x7f6b0c7b1800  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x142800)
    #6 0x7f6b0c7bdaf5  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14eaf5)
    #7 0x7f6b0c7bf63a  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x15063a)
    #8 0x7f6b0c7bf76b  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x15076b)
    #9 0x7f6b0cad20cd  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x4630cd)
    #10 0x7f6b0cad21da  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x4631da)
    #11 0x7f6b0dbd22a9 in gjs_eval_with_scope /media/M2/GNOME/gjs/gjs/jsapi-util.cpp:821
    #12 0x7f6b0db703b8 in gjs_context_eval /media/M2/GNOME/gjs/gjs/context.cpp:928
    #13 0x55a53ebd44f0 in gjstest_test_func_gjs_gobject_js_defined_type /media/M2/GNOME/gjs/test/gjs-tests.cpp:104
    #14 0x7f6b0d028f79 in test_case_run ../../glib/glib/gtestutils.c:2318
    #15 0x7f6b0d028f79 in g_test_run_suite_internal ../../glib/glib/gtestutils.c:2403

Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x7f6b0e37bb60 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xefb60)
    #1 0x7f6b0da6a103 in gjs_gtype_create_gtype_wrapper /media/M2/GNOME/gjs/gi/gtype.cpp:171
    #2 0x7f6b0d9d8a98 in gjs_value_from_g_argument /media/M2/GNOME/gjs/gi/arg.cpp:2712
    #3 0x7f6b0da30313 in gjs_invoke_c_function /media/M2/GNOME/gjs/gi/function.cpp:1155
    #4 0x7f6b0da339eb in function_call /media/M2/GNOME/gjs/gi/function.cpp:1413
    #5 0x7f6b0c7be163  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14f163)
    #6 0x7f6b0c8a1977  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x232977)
    #7 0x10d462eae41a  (<unknown module>)
    #8 0x621000bf7edf  (<unknown module>)
    #9 0x10d462ea94e7  (<unknown module>)
    #10 0x7f6b0c95f120  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x2f0120)
    #11 0x7f6b0c7b8cd8  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x149cd8)
    #12 0x7f6b0c7bdaf5  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14eaf5)
    #13 0x7f6b0c7be0c0  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14f0c0)
    #14 0x7f6b0c7be328  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14f328)
    #15 0x7f6b0caf1ce0 in JS_CallFunctionValue(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x482ce0)
    #16 0x7f6b0db337a8 in resolve_namespace_object /media/M2/GNOME/gjs/gi/repo.cpp:135
    #17 0x7f6b0db35a9e in repo_resolve /media/M2/GNOME/gjs/gi/repo.cpp:189
    #18 0x7f6b0cbde53f  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x56f53f)
    #19 0x7f6b0c7a484e  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x13584e)
    #20 0x7f6b0c7b290f  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14390f)
    #21 0x7f6b0c7bdaf5  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x14eaf5)
    #22 0x7f6b0c7bf63a  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x15063a)
    #23 0x7f6b0c7bf76b  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x15076b)
    #24 0x7f6b0cad20cd  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x4630cd)
    #25 0x7f6b0cad21da  (/usr/lib/x86_64-linux-gnu/libmozjs-60.so.0+0x4631da)
    #26 0x7f6b0dbd22a9 in gjs_eval_with_scope /media/M2/GNOME/gjs/gjs/jsapi-util.cpp:821
    #27 0x7f6b0db703b8 in gjs_context_eval /media/M2/GNOME/gjs/gjs/context.cpp:928
    #28 0x55a53ebd44f0 in gjstest_test_func_gjs_gobject_js_defined_type /media/M2/GNOME/gjs/test/gjs-tests.cpp:104
    #29 0x7f6b0d028f79 in test_case_run ../../glib/glib/gtestutils.c:2318
    #30 0x7f6b0d028f79 in g_test_run_suite_internal ../../glib/glib/gtestutils.c:2403

SUMMARY: AddressSanitizer: 184 byte(s) leaked in 23 allocation(s).

Fixed them using smart pointers, first commit uses a simpler solution. But I guess this one is easier to maintain.

Merge request reports