View Issue Details

IDProjectCategoryView StatusLast Update
0005387DarkRadiantDesign/Codingpublic23.09.2022 09:51
ReporterBielBdeLuna Assigned Togreebo  
PrioritynormalSeveritycrashReproducibilityalways
Status closedResolutionfixed 
PlatformLinuxOSUbuntuOS Version20.10
Product Version2.9.0 
Target Version2.9.0Fixed in Version2.9.0 
Summary0005387: segfault when applying a new material to a brush
DescriptionUsing the last pull from the 2.9.0 branch from github.
segfaults when applying a new material to a brush from either the media tab or the textures tab

Steps To Reproduce1 - Open Darkradiant using doom3

2 - select the first material from the media tab: textures/alphalabs/a_enwall13c

3 - click and drag on the y/x 2D screen in order to create a brush with that texture, the brush is drawn in the 3d view as I creat it and draw with the correct material alright.

4 - select the next material on the list in the media tab: textures/alphalabs/a_enwall20d <-- SEGFAULT

it can also happen if you have a material-less brush with the default material and then you apply a material from the textures tab.

I provided the two GDB traces in the additional info.
Additional Informationwhen you apply the matarial from the media tab:

$ gdb darkradiant
GNU gdb (Ubuntu 9.2-0ubuntu2) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from darkradiant...
(gdb) run
Starting program: /usr/local/bin/darkradiant
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff1b1a640 (LWP 53759)]
[New Thread 0x7ffff1319640 (LWP 53760)]

Thread 3 "gdbus" received signal SIG33, Real-time event 33.
[Switching to Thread 0x7ffff1319640 (LWP 53760)]
0x00007ffff69a766f in __GI___poll (fds=0x555555ac19f0, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
29 ../sysdeps/unix/sysv/linux/poll.c: El fitxer o directori no existeix.
(gdb) continue
Continuing.

Thread 2 "gmain" received signal SIG33, Real-time event 33.
[Switching to Thread 0x7ffff1b1a640 (LWP 53759)]
0x00007ffff69a766f in __GI___poll (fds=0x555555aadd60, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
29 in ../sysdeps/unix/sysv/linux/poll.c
(gdb) continue
Continuing.

Thread 1 "darkradiant" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff243ba80 (LWP 53755)]
wxutil::TreeModel::GetParent (this=0x555556bfa970, item=...) at TreeModel.cpp:584
584 if (owningNode->parent != NULL)
(gdb) bt
#0 wxutil::TreeModel::GetParent(wxDataViewItem const&) const (this=0x555556bfa970, item=...) at TreeModel.cpp:584
0000001 0x00007ffff7a4d495 in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000002 0x00007ffff7a5084c in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000003 0x00007ffff7a51e9b in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000004 0x00007ffff6230eff in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000005 0x00007ffff623696a in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000006 0x00007ffff62402d5 in gtk_tree_view_set_model () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000007 0x00007ffff7a4bb0e in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
#8 0x00007ffff7a4c84e in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000009 0x00007ffff79a5daa in wxDataViewModel::Cleared() () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000010 0x00005555557879d4 in ui::TexturePreviewCombo::refreshInfoTable() (this=0x555556bb2a40) at ui/common/TexturePreviewCombo.cpp:62
0000011 0x0000555555787dbc in ui::TexturePreviewCombo::SetTexture(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (this=0x555556bb2a40, tex=...) at ui/common/TexturePreviewCombo.cpp:54
0000012 0x000055555571391b in ui::MediaBrowser::handleSelectionChange() (this=0x555555af9410) at ui/mediabrowser/MediaBrowser.cpp:958
0000013 0x00007ffff7199661 in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000014 0x00007ffff71999fa in wxEvtHandler::SearchDynamicEventTable(wxEvent&) () at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000015 0x00007ffff7199a94 in wxEvtHandler::TryHereOnly(wxEvent&) () at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000016 0x00007ffff7199b4b in wxEvtHandler::ProcessEventLocally(wxEvent&) () at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000017 0x00007ffff7199bf1 in wxEvtHandler::ProcessEvent(wxEvent&) () at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000018 0x00007ffff719997b in wxEvtHandler::SafelyProcessEvent(wxEvent&) () at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000019 0x00007ffff7a59f97 in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000020 0x00007ffff5c37b56 in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000021 0x00007ffff5c50bbf in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000022 0x00007ffff5c50da3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000023 0x00007ffff623d34b in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000024 0x00007ffff6245690 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000025 0x00007ffff62b3cff in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000026 0x00007ffff5c37b56 in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000027 0x00007ffff5c50bbf in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000028 0x00007ffff5c50da3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000029 0x00007ffff60bb531 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000030 0x00007ffff5c3ad14 in g_cclosure_marshal_VOID__BOXEDv () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000031 0x00007ffff5c37b56 in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000032 0x00007ffff5c50bbf in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000033 0x00007ffff5c50da3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000034 0x00007ffff60b8046 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
--Type <RET> for more, q to quit, c to continue without paging--ret
0000035 0x00007ffff60b963f in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000036 0x00007ffff60bc803 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000037 0x00007ffff60820c0 in gtk_event_controller_handle_event () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000038 0x00007ffff625441d in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000039 0x00007ffff62ad6fb in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000040 0x00007ffff5c378fa in g_closure_invoke () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000041 0x00007ffff5c49f0e in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000042 0x00007ffff5c50586 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000043 0x00007ffff5c50da3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000044 0x00007ffff6256514 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000045 0x00007ffff6104d50 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000046 0x00007ffff6106a93 in gtk_main_do_event () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000047 0x00007ffff5ddee89 in () at /lib/x86_64-linux-gnu/libgdk-3.so.0
0000048 0x00007ffff5e138e6 in () at /lib/x86_64-linux-gnu/libgdk-3.so.0
0000049 0x00007ffff58944db in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
0000050 0x00007ffff5894788 in () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
0000051 0x00007ffff5894aa3 in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
0000052 0x00007ffff61059fd in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000053 0x00007ffff74e8bf5 in wxGUIEventLoop::DoRun() () at /lib/x86_64-linux-gnu/libwx_gtk3u_core-3.0.so.0
0000054 0x00007ffff704dd41 in wxEventLoopBase::Run() () at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000055 0x00007ffff70153da in wxAppConsoleBase::MainLoop() () at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000056 0x00007ffff70a173d in wxEntry(int&, wchar_t**) () at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000057 0x000055555564f7c2 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at main.cpp:7
(gdb) continue
Continuing.
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
quit



when you apply the material from the textures tab:

$ gdb darkradiant
GNU gdb (Ubuntu 9.2-0ubuntu2) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from darkradiant...
(gdb) run
Starting program: /usr/local/bin/darkradiant
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff1b1a640 (LWP 54044)]
[New Thread 0x7ffff1319640 (LWP 54045)]

Thread 3 "gdbus" received signal SIG33, Real-time event 33.
[Switching to Thread 0x7ffff1319640 (LWP 54045)]
0x00007ffff69a766f in __GI___poll (fds=0x555555abcde0, nfds=2, timeout=-1)
    at ../sysdeps/unix/sysv/linux/poll.c:29
29 ../sysdeps/unix/sysv/linux/poll.c: El fitxer o directori no existeix.
(gdb) continue
Continuing.

Thread 2 "gmain" received signal SIG33, Real-time event 33.
[Switching to Thread 0x7ffff1b1a640 (LWP 54044)]
0x00007ffff69a766f in __GI___poll (fds=0x555555aaa820, nfds=1, timeout=-1)
    at ../sysdeps/unix/sysv/linux/poll.c:29
29 in ../sysdeps/unix/sysv/linux/poll.c
(gdb) continue
Continuing.
Thread 1 "darkradiant" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff243ba80 (LWP 54040)]
wxutil::TreeModel::GetParent (this=0x555556d428b0, item=...)
    at TreeModel.cpp:584
584 if (owningNode->parent != NULL)
(gdb) bt
#0 wxutil::TreeModel::GetParent(wxDataViewItem const&) const
    (this=0x555556d428b0, item=...) at TreeModel.cpp:584
0000001 0x00007ffff7a4d495 in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000002 0x00007ffff7a5084c in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000003 0x00007ffff7a51e9b in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000004 0x00007ffff6230eff in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000005 0x00007ffff623696a in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000006 0x00007ffff62402d5 in gtk_tree_view_set_model ()
    at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000007 0x00007ffff7a4bb0e in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
#8 0x00007ffff7a4c84e in () at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000009 0x00007ffff79a5daa in wxDataViewModel::Cleared() ()
    at /lib/x86_64-linux-gnu/libwx_gtk3u_adv-3.0.so.0
0000010 0x00005555557879d4 in ui::TexturePreviewCombo::refreshInfoTable()
    (this=0x555556bdcd00) at ui/common/TexturePreviewCombo.cpp:62
0000011 0x0000555555787dbc in ui::TexturePreviewCombo::SetTexture(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    (this=0x555556bdcd00, tex=...) at ui/common/TexturePreviewCombo.cpp:54
0000012 0x000055555571391b in ui::MediaBrowser::handleSelectionChange()
    (this=0x555555bf5e80) at ui/mediabrowser/MediaBrowser.cpp:958
0000013 0x0000555555713bf1 in ui::MediaBrowser::setSelection(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    (this=0x555555bf5e80, selection="\220\322A\230\377\177\000\000\340\327A\230\--Type <RET> for more, q to quit, c to continue without paging--ret
377\177\000\000\320\336A\230\377\177\000\000P\340A\230\377\177\000\000\320\340A\230\377\177", '\000' <repeats 26 times>, "\320\320A\230\377\177\000\000\370\320A\230\377\177\000\000\370\320A\230\377\177\000\000\060\333A\230\377\177\000\000\000\000\000\000\000\000\000\000\060\333A\230\377\177\000\000\006\000\000\000\000\000\000\000\070\333A\230\377\177\000\000\000\000\000\000\000\000\000\000\025\002\000\000\000\000\000\000\300\031$\367\377\177\000\000\200\326A\230\377\177\000\000\220\330A\230\377\177", '\000' <repeats 34 times>...)
    at ui/mediabrowser/MediaBrowser.cpp:638
0000014 0x00005555557115a2 in ui::MediaBrowser::onShaderClipboardSourceChanged()
    (this=0x555555bf5e80) at ../include/imodule.h:414
0000015 0x00007ffff0578cca in sigc::internal::signal_emit0<void, sigc::nil>::emit(sigc::internal::signal_impl*) (impl=0x555556cb6d50)
    at /usr/include/sigc++-2.0/sigc++/signal.h:798
0000016 0x00007ffff081e165 in sigc::signal0<void, sigc::nil>::emit() const
    (this=0x555555a3e7b8) at /usr/include/sigc++-2.0/sigc++/signal.h:2803
0000017 selection::ShaderClipboard::sourceChanged() (this=0x555555a3e750)
    at selection/shaderclipboard/ShaderClipboard.cpp:53
0000018 0x00005555556f3eb5 in ui::TextureBrowser::selectTextureAt(int, int)
    (this=<optimized out>, mx=<optimized out>, my=<optimized out>)
    at /usr/include/c++/10/bits/shared_ptr_base.h:1324
0000019 0x00007ffff7199661 in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
--Type <RET> for more, q to quit, c to continue without paging--ret
0000020 0x00007ffff71999fa in wxEvtHandler::SearchDynamicEventTable(wxEvent&) ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000021 0x00007ffff7199a94 in wxEvtHandler::TryHereOnly(wxEvent&) ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000022 0x00007ffff7199b4b in wxEvtHandler::ProcessEventLocally(wxEvent&) ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000023 0x00007ffff7199bf1 in wxEvtHandler::ProcessEvent(wxEvent&) ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000024 0x00007ffff719997b in wxEvtHandler::SafelyProcessEvent(wxEvent&) ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000025 0x00007ffff7509f7e in ()
    at /lib/x86_64-linux-gnu/libwx_gtk3u_core-3.0.so.0
0000026 0x00007ffff62ad6fb in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000027 0x00007ffff5c378fa in g_closure_invoke ()
    at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000028 0x00007ffff5c4a4b3 in () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000029 0x00007ffff5c50586 in g_signal_emit_valist ()
    at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000030 0x00007ffff5c50da3 in g_signal_emit ()
    at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
0000031 0x00007ffff6256514 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000032 0x00007ffff6104d50 in () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000033 0x00007ffff6106a93 in gtk_main_do_event ()
--Type <RET> for more, q to quit, c to continue without paging--ret
    at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000034 0x00007ffff5ddee89 in () at /lib/x86_64-linux-gnu/libgdk-3.so.0
0000035 0x00007ffff5e138e6 in () at /lib/x86_64-linux-gnu/libgdk-3.so.0
0000036 0x00007ffff58944db in g_main_context_dispatch ()
    at /lib/x86_64-linux-gnu/libglib-2.0.so.0
0000037 0x00007ffff5894788 in () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
0000038 0x00007ffff5894aa3 in g_main_loop_run ()
    at /lib/x86_64-linux-gnu/libglib-2.0.so.0
0000039 0x00007ffff61059fd in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
0000040 0x00007ffff74e8bf5 in wxGUIEventLoop::DoRun() ()
    at /lib/x86_64-linux-gnu/libwx_gtk3u_core-3.0.so.0
0000041 0x00007ffff704dd41 in wxEventLoopBase::Run() ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000042 0x00007ffff70153da in wxAppConsoleBase::MainLoop() ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000043 0x00007ffff70a173d in wxEntry(int&, wchar_t**) ()
    at /lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
0000044 0x000055555564f7c2 in main(int, char**)
    (argc=<optimized out>, argv=<optimized out>) at main.cpp:7
(gdb) continue
Continuing.
Couldn't get registers: El procés no existeix.
Couldn't get registers: El procés no existeix.
(gdb) [Thread 0x7fffea5f0640 (LWP 54077) exited]

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
quit
TagsCrash; darkradiant

Relationships

related to 0006105 closedgreebo Crash when trying to set default mouse or keyboard bindings 

Activities

greebo

greebo

09.11.2020 04:08

administrator   ~0012879

Crash confirmed in Ubuntu 20.10 with wxWidgets 3.0.5

Related Changesets

DarkRadiant: 2.9.0 c7b161c7

14.11.2020 04:59

greebo


Details Diff
0005387: Work around a problem in wxGTK 3.0.5+: invoke ItemsDeleted before actually clearing the tree and invoking Cleared() Affected Issues
0005387
mod - libs/wxutil/TreeModel.cpp Diff File

DarkRadiant: master b0bc6020

23.09.2022 09:49

greebo


Details Diff
0006105: Disable the workaround in wxGTK 3.2.0 which appears to be counter-productive.

It has been introduced to solve a problem in wxGTK 3.0.5+, which doesn't seem to be
present anymore in in wxGTK 3.2.0. Original issue was 0005387.
Affected Issues
0005387, 0006105
mod - libs/wxutil/dataview/TreeModel.cpp Diff File

Issue History

Date Modified Username Field Change
08.11.2020 20:36 BielBdeLuna New Issue
08.11.2020 20:36 BielBdeLuna Tag Attached: Crash; darkradiant
09.11.2020 02:46 greebo Status new => acknowledged
09.11.2020 02:48 greebo Product Version => 2.9.0
09.11.2020 02:48 greebo Additional Information Updated
09.11.2020 04:08 greebo Status acknowledged => confirmed
09.11.2020 04:08 greebo Note Added: 0012879
14.11.2020 04:59 greebo Changeset attached => DarkRadiant 2.9.0 c7b161c7
14.11.2020 05:00 greebo Assigned To => greebo
14.11.2020 05:00 greebo Status confirmed => assigned
14.11.2020 05:00 greebo Status assigned => resolved
14.11.2020 05:00 greebo Resolution open => fixed
14.11.2020 05:00 greebo Fixed in Version => 2.9.0
14.11.2020 05:00 greebo Target Version => 2.9.0
05.02.2021 11:29 greebo Status resolved => closed
23.09.2022 09:44 greebo Relationship added related to 0006105
23.09.2022 09:51 greebo Changeset attached => DarkRadiant master b0bc6020