Skip to content
Snippets Groups Projects
  • Lars Kanis's avatar
    baaf1384
    Fix Segfault in final GC when using FXSplashWindow. · baaf1384
    Lars Kanis authored
    The internal object allocated when calling FXSplashWindow.new was FXSplashWindow instead
    of FXRbSplashWindow, so that no FXRbUnregisterRubyObj() was called. Therefore the object
    was double free'd.
    
    Stacktrace was:
    ==11529== Invalid read of size 8
    ==11529==    at 0x9265BBC: FX::FXObject::getClassName() const (FXObject.cpp:280)
    ==11529==    by 0x862EE55: FXRbObject::freefunc(FX::FXObject*) (markfuncs.cpp:77)
    ==11529==    by 0x4EA6254: finalize_list (gc.c:2944)
    ==11529==    by 0x4EAAFC2: rb_gc_call_finalizer_at_exit (gc.c:3075)
    ==11529==    by 0x4E9773B: ruby_cleanup (eval.c:101)
    ==11529==    by 0x4E979C4: ruby_run_node (eval.c:244)
    ==11529==    by 0x4007FA: main (main.c:38)
    ==11529==  Address 0x75e24c0 is 0 bytes inside a block of size 248 free'd
    ==11529==    at 0x4C2A4BC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==11529==    by 0x92B98AD: FX::FXSplashWindow::~FXSplashWindow() (FXSplashWindow.cpp:219)
    ==11529==    by 0x917C990: FX::FXComposite::~FXComposite() (FXComposite.cpp:304)
    ==11529==    by 0x929A5EF: FX::FXRootWindow::~FXRootWindow() (FXRootWindow.cpp:209)
    ==11529==    by 0x929A621: FX::FXRootWindow::~FXRootWindow() (FXRootWindow.cpp:211)
    ==11529==    by 0x9156DB9: FX::FXApp::~FXApp() (FXApp.cpp:4994)
    ==11529==    by 0x84912F3: FXRbApp::~FXRbApp() (FXRbApp.cpp:118)
    ==11529==    by 0x8491347: FXRbApp::~FXRbApp() (FXRbApp.cpp:127)
    ==11529==    by 0x862EF8E: FXRbObject::freefunc(FX::FXObject*) (markfuncs.cpp:92)
    ==11529==    by 0x4EA6254: finalize_list (gc.c:2944)
    ==11529==    by 0x4EAAFC2: rb_gc_call_finalizer_at_exit (gc.c:3075)
    ==11529==    by 0x4E9773B: ruby_cleanup (eval.c:101)
    baaf1384
    History
    Fix Segfault in final GC when using FXSplashWindow.
    Lars Kanis authored
    The internal object allocated when calling FXSplashWindow.new was FXSplashWindow instead
    of FXRbSplashWindow, so that no FXRbUnregisterRubyObj() was called. Therefore the object
    was double free'd.
    
    Stacktrace was:
    ==11529== Invalid read of size 8
    ==11529==    at 0x9265BBC: FX::FXObject::getClassName() const (FXObject.cpp:280)
    ==11529==    by 0x862EE55: FXRbObject::freefunc(FX::FXObject*) (markfuncs.cpp:77)
    ==11529==    by 0x4EA6254: finalize_list (gc.c:2944)
    ==11529==    by 0x4EAAFC2: rb_gc_call_finalizer_at_exit (gc.c:3075)
    ==11529==    by 0x4E9773B: ruby_cleanup (eval.c:101)
    ==11529==    by 0x4E979C4: ruby_run_node (eval.c:244)
    ==11529==    by 0x4007FA: main (main.c:38)
    ==11529==  Address 0x75e24c0 is 0 bytes inside a block of size 248 free'd
    ==11529==    at 0x4C2A4BC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==11529==    by 0x92B98AD: FX::FXSplashWindow::~FXSplashWindow() (FXSplashWindow.cpp:219)
    ==11529==    by 0x917C990: FX::FXComposite::~FXComposite() (FXComposite.cpp:304)
    ==11529==    by 0x929A5EF: FX::FXRootWindow::~FXRootWindow() (FXRootWindow.cpp:209)
    ==11529==    by 0x929A621: FX::FXRootWindow::~FXRootWindow() (FXRootWindow.cpp:211)
    ==11529==    by 0x9156DB9: FX::FXApp::~FXApp() (FXApp.cpp:4994)
    ==11529==    by 0x84912F3: FXRbApp::~FXRbApp() (FXRbApp.cpp:118)
    ==11529==    by 0x8491347: FXRbApp::~FXRbApp() (FXRbApp.cpp:127)
    ==11529==    by 0x862EF8E: FXRbObject::freefunc(FX::FXObject*) (markfuncs.cpp:92)
    ==11529==    by 0x4EA6254: finalize_list (gc.c:2944)
    ==11529==    by 0x4EAAFC2: rb_gc_call_finalizer_at_exit (gc.c:3075)
    ==11529==    by 0x4E9773B: ruby_cleanup (eval.c:101)