segfault + assert failed in Yield(): wxYield called recursively

Bug #1498252 reported by pipe
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
KiCad
Fix Released
High
Unassigned

Bug Description

I got this when I tried to add a mounting hole to the PCB. I clicked the "add footprints" icon, clicked on the board and got the "load footprint" dialogue. Then I picked "select by browser", selected a footprint (maybe a 5 mm hole), but it didn't add it to the board - I came back to the "load footprint" dialogie. I did the "select by browser" again, selected my footprint, and then I got the assertion. After I clicked "continue" on the assertion dialogue, it segfaulted.

Application: kicad
Version: (2015-09-20 BZR 6203)-product debug build
wxWidgets: Version 3.0.2 (debug,wchar_t,compiler with C++ ABI 1009,GCC 5.2.1,wx containers,compatible with 2.8)
Platform: Linux 4.1.0-2-amd64 x86_64, 64 bit, Little endian, wxGTK
Boost version: 1.58.0
         USE_WX_GRAPHICS_CONTEXT=OFF
         USE_WX_OVERLAY=OFF
         KICAD_SCRIPTING=OFF
         KICAD_SCRIPTING_MODULES=OFF
         KICAD_SCRIPTING_WXPYTHON=OFF
         USE_FP_LIB_TABLE=HARD_CODED_ON
         BUILD_GITHUB_PLUGIN=ON

Assertion backtrace and segfault backtrace follows:

ASSERT INFO:
../src/common/evtloopcmn.cpp(110): assert "Assert failure" failed in Yield(): wxYield called recursively

BACKTRACE:
[1] wxEventLoopBase::Yield(bool)
[2] wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const
[3] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[4] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[5] wxEvtHandler::TryHereOnly(wxEvent&)
[6] wxEvtHandler::ProcessEventLocally(wxEvent&)
[7] wxEvtHandler::ProcessEvent(wxEvent&)
[8] wxScrollHelperEvtHandler::ProcessEvent(wxEvent&)
[9] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[10] g_closure_invoke
[11] g_signal_emit_valist
[12] g_signal_emit
[13] gtk_propagate_event
[14] gtk_main_do_event
[15] g_main_context_dispatch
[16] g_main_context_iteration
[17] gtk_main_iteration
[18] wxGUIEventLoop::YieldFor(long)
[19] wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const
[20] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[21] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[22] wxEvtHandler::TryHereOnly(wxEvent&)
[23] wxEvtHandler::ProcessEventLocally(wxEvent&)
[24] wxEvtHandler::ProcessEvent(wxEvent&)
[25] wxScrollHelperEvtHandler::ProcessEvent(wxEvent&)
[26] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[27] g_closure_invoke
[28] g_signal_emit_valist
[29] g_signal_emit
[30] gtk_propagate_event
[31] gtk_main_do_event
[32] g_main_context_dispatch
[33] g_main_loop_run
[34] gtk_main
[35] wxGUIEventLoop::DoRun()
[36] wxEventLoopBase::Run()
[37] wxAppConsoleBase::MainLoop()
[38] APP_KICAD::OnRun() /home/pipe/src/kicad/kicad.bzr/kicad/kicad.cpp:288
[39] wxEntry(int&, wchar_t**)
[40] main /home/pipe/src/kicad/kicad.bzr/kicad/kicad.cpp:320
[41] __libc_start_main
[42] _start

[New LWP 21809]
[New LWP 22015]
[New LWP 21842]
[New LWP 22014]
[New LWP 21843]
[New LWP 22013]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `kicad'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f5c55041848 in typeinfo for wxProcess () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
[Current thread is 1 (Thread 0x7f5c567feb00 (LWP 21809))]
#0 0x00007f5c55041848 in typeinfo for wxProcess () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#1 0x00007f5c3a3eb9c1 in PCB_BASE_FRAME::SelectFootprintFromLibBrowser (this=0x1b51590) at /home/pipe/src/kicad/kicad.bzr/pcbnew/loadcmp.cpp:154
        viewer = 0xf7d88a0
        fpid = {static npos = 18446744073709551615, m_impl = L"Mounting_Holes:MountingHole_5mm", m_convertedToChar = {m_str = 0x0, m_len = 37585520}}
        ret = 1
#2 0x00007f5c3a3ebc1e in PCB_BASE_FRAME::LoadModuleFromLibrary (this=0x1b51590, aLibrary=..., aTable=0xc662d10, aUseFootprintViewer=true, aDC=0x7ffd97e0dda0) at /home/pipe/src/kicad/kicad.bzr/pcbnew/loadcmp.cpp:186
        module = 0x0
        curspos = {x = 109500000, y = 93500000}
        moduleName = {static npos = 18446744073709551615, m_impl = L"", m_convertedToChar = {m_str = 0x0, m_len = 121165568}}
        keys = {static npos = 18446744073709551615, m_impl = L"", m_convertedToChar = {m_str = 0x0, m_len = 80}}
        libName = {static npos = 18446744073709551615, m_impl = L"", m_convertedToChar = {m_str = 0x0, m_len = 4096}}
        allowWildSeach = true
        HistoryList = {m_nSize = 16, m_nCount = 4, m_pItems = 0xca315d8, m_autoSort = false}
        lastComponentName = {static npos = 18446744073709551615, m_impl = L"Mounting_Holes:MountingHole_5mm", m_convertedToChar = {m_str = 0xc114fd0 "mylib:Lumberg_TM_0508_A-6", m_len = 25}}
        dlg = {<DIALOG_GET_COMPONENT_BASE> = {<DIALOG_SHIM> = {<wxDialog> = {<No data fields>}, <KIWAY_HOLDER> = {m_kiway = 0x70df20 <Kiway>}, m_hash_key = "", m_qmodal_loop = 0x0, m_qmodal_showing = false, m_qmodal_parent_disabler = 0x0}, m_staticTextName = 0x80c5310, m_textCmpNameCtrl = 0xa8f00e0, m_staticTextHistory = 0xf799ce0, m_historyList = 0xf7d9380, m_buttonOK = 0x22f9570, m_buttonKW = 0x22e73f0, m_buttonCancel = 0x22e4930, m_buttonList = 0x22f39d0, m_buttonBrowse = 0xf8669c0}, m_auxToolSelector = true, m_Text = {static npos = 18446744073709551615, m_impl = L"", m_convertedToChar = {m_str = 0x0, m_len = 140034353469697}}, m_selectionIsKeyword = false, m_GetExtraFunction = true}
        fpid = {nickname = {<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >> = "\340h\037\003\000\000\000\000\257\345\250\362", '\000' <repeats 28 times>, " \006`\000\000\000\000\000\000<", '\000' <repeats 22 times>, "\032\000\000\000\032\000\000\000\377\377\377\377\377\377\377\377\001\000\000\000\001", '\000' <repeats 22 times>, "?\000\000\000?", '\000' <repeats 48 times>, "\004\000\000\000\000\000\000", <No data fields>}, footprint = {<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >> = <error: Cannot access memory at address 0x100000000>, <No data fields>}, revision = {<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >> = <error: Cannot access memory at address 0x15>, <No data fields>}}
        __FUNCTION__ = "LoadModuleFromLibrary"
#3 0x00007f5c3a42192e in PCB_EDIT_FRAME::OnLeftClick (this=0x1b51590, aDC=0x7ffd97e0dda0, aPosition=...) at /home/pipe/src/kicad/kicad.bzr/pcbnew/onleftclick.cpp:362
        DrawStruct = 0x0
        exit = false
        no_tool = false
#4 0x00007f5c3a77261f in EDA_DRAW_PANEL::OnMouseEvent (this=0x1b67750, event=...) at /home/pipe/src/kicad/kicad.bzr/common/draw_panel.cpp:1125
        ignoreEvt = false
        localrealbutt = 0
        localbutt = 0
        screen = 0x3113a70
        DC = <incomplete type>
        kbstat = 0
        lastPanel = 0x1b67750
#5 0x00007f5c54c2270e in wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#6 0x00007f5c54da8967 in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#7 0x00007f5c54da8a5b in wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#8 0x00007f5c54da8e18 in wxEvtHandler::TryHereOnly(wxEvent&) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#9 0x00007f5c54da8ea3 in wxEvtHandler::ProcessEventLocally(wxEvent&) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#10 0x00007f5c54da8f05 in wxEvtHandler::ProcessEvent(wxEvent&) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#11 0x00007f5c557a66fb in wxScrollHelperEvtHandler::ProcessEvent(wxEvent&) () from /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0
No symbol table info available.
#12 0x00007f5c54da8c67 in wxEvtHandler::SafelyProcessEvent(wxEvent&) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#13 0x00007f5c5555215b in ?? () from /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0
No symbol table info available.
#14 0x00007f5c51adba7f in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
No symbol table info available.
#15 0x00007f5c514b12d5 in g_closure_invoke () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
No symbol table info available.
#16 0x00007f5c514c303c in ?? () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
No symbol table info available.
#17 0x00007f5c514cb1a5 in g_signal_emit_valist () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
No symbol table info available.
#18 0x00007f5c514cb8ff in g_signal_emit () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
No symbol table info available.
#19 0x00007f5c51bf2ecc in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
No symbol table info available.
#20 0x00007f5c51ada1c4 in gtk_propagate_event () from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
No symbol table info available.
#21 0x00007f5c51ada65b in gtk_main_do_event () from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
No symbol table info available.
#22 0x00007f5c5174dbbc in ?? () from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
No symbol table info available.
#23 0x00007f5c50790c3d in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#24 0x00007f5c50790f20 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#25 0x00007f5c50791242 in g_main_loop_run () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#26 0x00007f5c51ad95d7 in gtk_main () from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
No symbol table info available.
#27 0x00007f5c55523de5 in wxGUIEventLoop::DoRun() () from /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0
No symbol table info available.
#28 0x00007f5c54c646e3 in wxEventLoopBase::Run() () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#29 0x00007f5c54c29b76 in wxAppConsoleBase::MainLoop() () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#30 0x000000000043c548 in APP_KICAD::OnRun (this=0x1868da0) at /home/pipe/src/kicad/kicad.bzr/kicad/kicad.cpp:288
        __FUNCTION__ = "OnRun"
#31 0x00007f5c54cb62b0 in wxEntry(int&, wchar_t**) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
No symbol table info available.
#32 0x000000000043aeaf in main (argc=1, argv=0x7ffd97e0ec58) at /home/pipe/src/kicad/kicad.bzr/kicad/kicad.cpp:320
No locals.

Tags: pcbnew assert
tags: added: assert pcbnew
Changed in kicad:
importance: Undecided → High
Revision history for this message
Wayne Stambaugh (stambaughw) wrote :

Was this done in the OpenGL or Cairo canvas? I cannot duplicate this behavior from the legacy canvas. You also did not indicate whether or not you closed the footprint browser the first time you launched it. On windows I have to close the footprint browser in order to attempt to add a footprint the second time. Your description does not make this clear.

Revision history for this message
pipe (pipatron) wrote :

I tried to trigger this in a new kicad, and I managed to do it in my current board. Sadly I didn't get a backtrace from the segfault this time, but at least I got the assertion backtrace.

This was in the legacy canvas. I can not reproduce it in an empty board, but I will try to reproduce it again in the board that currently failed.

With regards to the footprint browser - I doubleclicked a footprint which made the footprint browser close. If I manage to create a readily reproducible case I'll add more details to this.

ASSERT INFO:
../src/common/evtloopcmn.cpp(110): assert "Assert failure" failed in Yield(): wxYield called recursively

BACKTRACE:
[1] wxEventLoopBase::Yield(bool)
[2] wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const
[3] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[4] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[5] wxEvtHandler::TryHereOnly(wxEvent&)
[6] wxEvtHandler::ProcessEventLocally(wxEvent&)
[7] wxEvtHandler::ProcessEvent(wxEvent&)
[8] wxScrollHelperEvtHandler::ProcessEvent(wxEvent&)
[9] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[10] g_closure_invoke
[11] g_signal_emit_valist
[12] g_signal_emit
[13] gtk_propagate_event
[14] gtk_main_do_event
[15] g_main_context_dispatch
[16] g_main_context_iteration
[17] gtk_main_iteration
[18] wxGUIEventLoop::YieldFor(long)
[19] wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const
[20] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[21] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[22] wxEvtHandler::TryHereOnly(wxEvent&)
[23] wxEvtHandler::ProcessEventLocally(wxEvent&)
[24] wxEvtHandler::ProcessEvent(wxEvent&)
[25] wxScrollHelperEvtHandler::ProcessEvent(wxEvent&)
[26] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[27] g_closure_invoke
[28] g_signal_emit_valist
[29] g_signal_emit
[30] gtk_propagate_event
[31] gtk_main_do_event
[32] g_main_context_dispatch
[33] g_main_loop_run
[34] gtk_main
[35] wxGUIEventLoop::DoRun()
[36] wxEventLoopBase::Run()
[37] wxAppConsoleBase::MainLoop()
[38] APP_KICAD::OnRun() /home/pipe/src/kicad/kicad.bzr/kicad/kicad.cpp:288
[39] wxEntry(int&, wchar_t**)
[40] main /home/pipe/src/kicad/kicad.bzr/kicad/kicad.cpp:320
[41] __libc_start_main
[42] _start

Application: pcbnew
Version: (2015-10-02 BZR 6241)-product debug build
wxWidgets: Version 3.0.2 (debug,wchar_t,compiler with C++ ABI 1009,GCC 5.2.1,wx containers,compatible with 2.8)
Platform: Linux 4.1.0-2-amd64 x86_64, 64 bit, Little endian, wxGTK
Boost version: 1.58.0
         USE_WX_GRAPHICS_CONTEXT=OFF
         USE_WX_OVERLAY=OFF
         KICAD_SCRIPTING=OFF
         KICAD_SCRIPTING_MODULES=OFF
         KICAD_SCRIPTING_WXPYTHON=OFF
         USE_FP_LIB_TABLE=HARD_CODED_ON
         BUILD_GITHUB_PLUGIN=ON

Revision history for this message
pipe (pipatron) wrote :

Ok, I have some more information now. It only happens if I start pcbnew from the kicad project overview window.

I did a screen recording of this event. Not sure if it's small enough to fit here.

Revision history for this message
pipe (pipatron) wrote :

For what it's worth, I can't trigger this in OpenGL mode, with the same board.

Changed in kicad:
status: New → Confirmed
Revision history for this message
Wayne Stambaugh (stambaughw) wrote :

This indeed is a problem. It appears that double clicking to select the footprint in the footprint browser causes the footprint tool to insert another insert footprint which raise a new DIALOG_GET_COMPONENT to be raised before the footprint selected in the footprint browser has a chance to be placed. I can confirm that it does not happen when Pcbnew is run in stand alone mode. I can also confirm that it does not happen on windows so it appears to be unique to wxGTK.

Revision history for this message
Wayne Stambaugh (stambaughw) wrote :
Download full text (3.8 KiB)

Here is a back trace after the crash.

#0 0x00007fffdc9d3855 in PCB_BASE_FRAME::SelectFootprintFromLibBrowser (
    this=0xb55f10) at /home/wayne/src/kicad/product/pcbnew/loadcmp.cpp:154
#1 0x00007fffdc9d3ab4 in PCB_BASE_FRAME::LoadModuleFromLibrary (
    this=0xb55f10, aLibrary=..., aTable=0x2ce02a0, aUseFootprintViewer=true,
    aDC=0x7fffffffd4b0) at /home/wayne/src/kicad/product/pcbnew/loadcmp.cpp:186
#2 0x00007fffdca09926 in PCB_EDIT_FRAME::OnLeftClick (this=0xb55f10,
    aDC=0x7fffffffd4b0, aPosition=...)
    at /home/wayne/src/kicad/product/pcbnew/onleftclick.cpp:362
#3 0x00007fffdcff26a1 in EDA_DRAW_PANEL::OnMouseEvent (this=0xda7000,
    event=...) at /home/wayne/src/kicad/product/common/draw_panel.cpp:1125
#4 0x00007ffff633c70e in wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const ()
   from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#5 0x00007ffff64c2967 in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) ()
   from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#6 0x00007ffff64c2a5b in wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#7 0x00007ffff64c2e18 in wxEvtHandler::TryHereOnly(wxEvent&) ()
   from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#8 0x00007ffff64c2ea3 in wxEvtHandler::ProcessEventLocally(wxEvent&) ()
   from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#9 0x00007ffff64c2f05 in wxEvtHandler::ProcessEvent(wxEvent&) ()
   from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#10 0x00007ffff6ec06fb in wxScrollHelperEvtHandler::ProcessEvent(wxEvent&) ()
   from /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0
#11 0x00007ffff64c2c67 in wxEvtHandler::SafelyProcessEvent(wxEvent&) ()
   from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#12 0x00007ffff6c6c15b in ?? ()
   from /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0
#13 0x00007ffff3282a7f in ?? ()
   from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#14 0x00007ffff2c57015 in g_closure_invoke ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#15 0x00007ffff2c69061 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#16 0x00007ffff2c71899 in g_signal_emit_valist ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#17 0x00007ffff2c7212f in g_signal_emit ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#18 0x00007ffff3399ecc in ?? ()
   from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#19 0x00007ffff32811c4 in gtk_propagate_event ()
   from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#20 0x00007ffff328165b in gtk_main_do_event ()
   from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#21 0x00007ffff2ef4bbc in ?? ()
   from /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#22 0x00007ffff1e84fe7 in g_main_context_dispatch ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#23 0x00007ffff1e85240 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#24 0x00007ffff1e85562 in g_main_loop_run ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#25 0x00007ffff32805d7 in gtk_main ()
   from /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so...

Read more...

Changed in kicad:
status: Confirmed → Fix Committed
Changed in kicad:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.