Hi Neil,
After updating to 5.2.0, my GTK 2.0-based application is getting assertion failures on ScintillaGTK:2762.cxx: PLATFORM_ASSERT(rgnUpdate == nullptr);
hg bisect blames this revision:
Changeset: 9065 (5e067a868567) Implement more unique_ptr allocation wrappers and place in new Wrappers.h header.
It appears that ScintillaGTK::ExposeTextThis() is re-entrant. Here's a simplified version of my call stack:
(see my note between #19 and #56)
#0 Scintilla::Internal::ScintillaGTK::ExposeTextThis(_GtkWidget*, _GdkEventExpose*) (this=0x555555ab4d40, ose=0x7fffffff74a0)
at scintilla/gtk/ScintillaGTK.cxx:2762
#1 0x00005555558573c5 in Scintilla::Internal::ScintillaGTK::ExposeText(_GtkWidget*, _GdkEventExpose*, Scintilla::Internal::ScintillaGTK*) (widget=0x555555aaab10, ose=0x7fffffff74a0, sciThis=0x555555ab4d40) at scintilla/gtk/ScintillaGTK.cxx:2791
[...]
#13 0x00007ffff7ad812d in gdk_window_process_updates () at /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#14 0x000055555585194a in Scintilla::Internal::ScintillaGTK::ScrollText(long) (this=0x555555ea65c0, linesToMove=-3)
at scintilla/gtk/ScintillaGTK.cxx:1084
#15 0x0000555555799908 in Scintilla::Internal::Editor::ScrollTo(long, bool) (this=0x555555ea65c0, line=3, moveThumb=true)
at scintilla/src/Editor.cxx:974
#16 0x00005555557b3d9b in Scintilla::Internal::Editor::WndProc(Scintilla::Message, unsigned long, long)
(this=0x555555ea65c0, iMessage=Scintilla::Message::SetFirstVisibleLine, wParam=3, lParam=0) at scintilla/src/Editor.cxx:5993
#17 0x00005555558191b9 in Scintilla::Internal::ScintillaBase::WndProc(Scintilla::Message, unsigned long, long)
(this=0x555555ea65c0, iMessage=Scintilla::Message::SetFirstVisibleLine, wParam=3, lParam=0)
at scintilla/src/ScintillaBase.cxx:1130
#18 0x00005555558512d5 in Scintilla::Internal::ScintillaGTK::WndProc(Scintilla::Message, unsigned long, long)
(this=0x555555ea65c0, iMessage=Scintilla::Message::SetFirstVisibleLine, wParam=3, lParam=0) at scintilla/gtk/ScintillaGTK.cxx:935
#19 0x0000555555858518 in scintilla_send_message(ScintillaObject*, unsigned int, uptr_t, sptr_t)
(sci=0x555555cc3220, iMessage=2613, wParam=3, lParam=0) at scintilla/gtk/ScintillaGTK.cxx:3111
[... my application handles the Scintilla notification and calls back into Scintilla ...]
#56 0x0000555555860771 in scintilla_marshal_VOID__INT_BOXED
(closure=0x555555ad2210, return_value=0x0, n_param_values=3, param_values=0x7fffffffa840, invocation_hint=0x7fffffffa7c0, marshal_data=0x0) at scintilla/gtk/scintilla-marshal.c:117
#57 0x00007ffff7690802 in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#58 0x00007ffff76a4814 in () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#59 0x00007ffff76afbbe in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#60 0x00007ffff76b00f3 in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#61 0x00005555558520a9 in Scintilla::Internal::ScintillaGTK::NotifyParent(Scintilla::NotificationData) (this=0x555555ab4d40, scn=...)
at scintilla/gtk/ScintillaGTK.cxx:1163
#62 0x00005555557a1a64 in Scintilla::Internal::Editor::NotifyUpdateUI() (this=0x555555ab4d40) at scintilla/src/Editor.cxx:2441
#63 0x000055555579d4e6 in Scintilla::Internal::Editor::Paint(Scintilla::Internal::Surface*, Scintilla::Internal::PRectangle)
(this=0x555555ab4d40, surfaceWindow=0x555555c801d0, rcArea=...) at scintilla/src/Editor.cxx:1760
#64 0x0000555555857291 in Scintilla::Internal::ScintillaGTK::ExposeTextThis(_GtkWidget*, _GdkEventExpose*)
(this=0x555555ab4d40, ose=0x7fffffffb370) at scintilla/gtk/ScintillaGTK.cxx:2770
#65 0x00005555558573c5 in Scintilla::Internal::ScintillaGTK::ExposeText(_GtkWidget*, _GdkEventExpose*, Scintilla::Internal::ScintillaGTK*) (widget=0x555555aaab10, ose=0x7fffffffb370, sciThis=0x555555ab4d40) at scintilla/gtk/ScintillaGTK.cxx:2791
Do you have any idea what could be going wrong here and why that change is to blame?
Cheers,
Mitchell