Hi Sergey That works perfectly for me! I've made a minor change in the attached patch - the New button on the button bar now creates a new tab rather than a new window. That seems more useful to me (you still have options for both on the File menu). Seem OK to you?
Neel - can you please re-test the attached patch and give it a second review? Thanks. On Tue, Feb 16, 2016 at 7:53 PM, Sergey Busel <sbu...@gmail.com> wrote: > Dave, > > I still could not recreate the crash in my environment. But I have > modified the way tabs are closed. Tabs are no longer being removed/deleted > from the code, that task is now left for AuiNotebook when the window is > closed. Again, it works for me without crashes. I am testing with up to 15, > 20, 25 tabs... > > Could you please test the attached patch and see if not deleting tabs from > the close event makes any difference? > > Thank you. > > On Tue, Feb 16, 2016 at 4:20 AM, Dave Page <dp...@pgadmin.org> wrote: > >> >> >> On Tue, Feb 16, 2016 at 12:42 AM, Sergey Busel <sbu...@gmail.com> wrote: >> >>> After trying it couple times, I was able to reproduce the crash. I think >>> it was due to the way tabs were being closed. A dirty tab would prompt the >>> user to save the changes and close the tab right away before moving on to >>> the next tab. I think it crashed because the user was closing the window >>> via a menu item and wx wanted to put the focus back into the last control >>> that had it, which was already closed and cleaned up by the AuiNotebook. I >>> could not reproduce this issue when closing the window via the X button. >>> >>> Anyway, I changed the way tabs are closed. First, all tabs are checked >>> for being dirty and each dirty tab prompts the user to save the changes. >>> Then, all tabs are closed, one at a time. I tried the same steps 10 times >>> and could not reproduce the crash. >>> >>> Please let me know if you are still able to reproduce the crash. >>> >> >> Was that the correct patch? I still see what appears to be the same crash >> :-( >> >> Thread 0 Crashed:: Dispatch queue: com.apple.main-thread >> 0 libsystem_kernel.dylib 0x9ae66332 __kill + 10 >> 1 libsystem_kernel.dylib 0x9ae65932 kill$UNIX2003 + 32 >> 2 libsystem_c.dylib 0x955cf75e raise + 26 >> 3 libwx_base_carbonud-2.8.0.dylib 0x02477a92 wxTrap() + 18 >> 4 libwx_macud_core-2.8.0.dylib 0x01db2ceb >> wxGUIAppTraitsBase::ShowAssertDialog(wxString const&) + 251 >> 5 libwx_base_carbonud-2.8.0.dylib 0x02477d41 >> _ZL16ShowAssertDialogPKwiS0_S0_S0_P11wxAppTraits + 545 >> 6 libwx_base_carbonud-2.8.0.dylib 0x024780bd >> wxAppConsole::OnAssertFailure(wchar_t const*, int, wchar_t const*, wchar_t >> const*, wchar_t const*) + 99 >> 7 libwx_base_carbonud-2.8.0.dylib 0x02477f05 wxOnAssert(wchar_t >> const*, int, char const*, wchar_t const*, wchar_t const*) + 309 >> 8 libwx_macud_core-2.8.0.dylib 0x01dd1c4d >> wxControlContainer::SetLastFocus(wxWindow*) + 147 >> 9 libwx_macud_core-2.8.0.dylib 0x01eda8c0 >> wxPanel::OnChildFocus(wxChildFocusEvent&) + 50 >> 10 libwx_base_carbonud-2.8.0.dylib 0x02477984 >> wxAppConsole::HandleEvent(wxEvtHandler*, void (wxEvtHandler::*)(wxEvent&), >> wxEvent&) const + 102 >> 11 libwx_base_carbonud-2.8.0.dylib 0x02560023 >> wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&, >> wxEvtHandler*, wxEvent&) + 391 >> 12 libwx_base_carbonud-2.8.0.dylib 0x025624ef >> wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*) + 221 >> 13 libwx_base_carbonud-2.8.0.dylib 0x02561716 >> wxEvtHandler::ProcessEvent(wxEvent&) + 388 >> 14 libwx_base_carbonud-2.8.0.dylib 0x02560bc8 >> wxEvtHandler::ProcessPendingEvents() + 302 >> 15 libwx_base_carbonud-2.8.0.dylib 0x024786d8 >> wxAppConsole::ProcessPendingEvents() + 232 >> 16 libwx_base_carbonud-2.8.0.dylib 0x02555ea3 >> wxMacProcessNotifierAndPendingEvents + 35 >> 17 libwx_macud_core-2.8.0.dylib 0x01c9a2c1 >> wxApp::MacHandleOneEvent(void*) + 97 >> 18 libwx_macud_core-2.8.0.dylib 0x01c9a3ce wxApp::MacDoOneEvent() + >> 246 >> 19 libwx_macud_core-2.8.0.dylib 0x01ccb7fd wxEventLoop::Dispatch() + >> 57 >> 20 libwx_macud_core-2.8.0.dylib 0x01dff6c1 wxEventLoopManual::Run() + >> 421 >> 21 libwx_macud_core-2.8.0.dylib 0x01db35b4 wxAppBase::MainLoop() + 98 >> 22 libwx_macud_core-2.8.0.dylib 0x01db2a6a wxAppBase::OnRun() + 52 >> 23 libwx_base_carbonud-2.8.0.dylib 0x024d8782 wxEntry(int&, wchar_t**) >> + 258 >> 24 libwx_base_carbonud-2.8.0.dylib 0x024d896d wxEntry(int&, char**) + 77 >> 25 org.postgresql.pgadmin3 0x00058264 main + 36 (pgAdmin3.cpp:126) >> 26 org.postgresql.pgadmin3 0x00036615 start + 53 >> >> >> >>> >>> Thanks. >>> >>> On Sun, Feb 14, 2016 at 11:55 PM, Neel Patel < >>> neel.pa...@enterprisedb.com> wrote: >>> >>>> Hi , >>>> >>>> I just applied the patch in Linux environment and found the crash. >>>> Below are the steps to reproduce. >>>> We may need to perform below steps multiple time to reproduce the crash. >>>> >>>> - Open the "Query Window". >>>> - Go to "File" and click on "New SQL tab". Open the 3-4 SQL tabs >>>> and execute any query in one SQL tab. >>>> - Go to "File" menu and click on "Exit". >>>> - After clicking on "Exit" button only Query window should close >>>> but pgAdmin3 is getting crashed. >>>> >>>> Below are the traces for reference. >>>> >>>> #0 0x00007ffff6c4fbf3 in wxControlContainer::SetLastFocus(wxWindow*) >>>> () from /usr/local/lib/libwx_gtk2u_core-2.8.so.0 >>>> #1 0x00007ffff6ccb684 in wxPanel::OnChildFocus(wxChildFocusEvent&) () >>>> from /usr/local/lib/libwx_gtk2u_core-2.8.so.0 >>>> #2 0x00007ffff633d9d6 in >>>> wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&, >>>> wxEvtHandler*, wxEvent&) () >>>> from /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #3 0x00007ffff633da7b in wxEventHashTable::HandleEvent(wxEvent&, >>>> wxEvtHandler*) () from /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #4 0x00007ffff633dde7 in wxEvtHandler::ProcessEvent(wxEvent&) () from >>>> /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #5 0x00007ffff633d938 in wxEvtHandler::ProcessPendingEvents() () from >>>> /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #6 0x00007ffff62bb281 in wxAppConsole::ProcessPendingEvents() () from >>>> /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #7 0x00007ffff6c4504e in wxAppBase::ProcessIdle() () from >>>> /usr/local/lib/libwx_gtk2u_core-2.8.so.0 >>>> #8 0x00007ffff6bbfe31 in wxapp_idle_callback () from >>>> /usr/local/lib/libwx_gtk2u_core-2.8.so.0 >>>> #9 0x00007ffff366ace5 in g_main_context_dispatch () from >>>> /lib/x86_64-linux-gnu/libglib-2.0.so.0 >>>> #10 0x00007ffff366b048 in ?? () from >>>> /lib/x86_64-linux-gnu/libglib-2.0.so.0 >>>> #11 0x00007ffff366b30a in g_main_loop_run () from >>>> /lib/x86_64-linux-gnu/libglib-2.0.so.0 >>>> #12 0x00007ffff4106eb2 in gtk_dialog_run () from >>>> /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 >>>> #13 0x00007ffff6c31aea in wxMessageDialog::ShowModal() () from >>>> /usr/local/lib/libwx_gtk2u_core-2.8.so.0 >>>> #14 0x00000000006b79bf in frmQuery::CheckChanged(bool) () >>>> #15 0x00000000006a967e in frmQuery::SqlBookClose(bool) () >>>> #16 0x00000000006b7d1e in frmQuery::OnClose(wxCloseEvent&) () >>>> #17 0x00007ffff633d9d6 in >>>> wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&, >>>> wxEvtHandler*, wxEvent&) () >>>> from /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #18 0x00007ffff633da7b in wxEventHashTable::HandleEvent(wxEvent&, >>>> wxEvtHandler*) () from /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #19 0x00007ffff633dde7 in wxEvtHandler::ProcessEvent(wxEvent&) () from >>>> /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #20 0x00007ffff633dd70 in wxEvtHandler::ProcessEvent(wxEvent&) () from >>>> /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #21 0x00007ffff6cac39c in wxWindowBase::Close(bool) () from >>>> /usr/local/lib/libwx_gtk2u_core-2.8.so.0 >>>> #22 0x00007ffff633d9d6 in >>>> wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&, >>>> wxEvtHandler*, wxEvent&) () >>>> from /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #23 0x00007ffff633da7b in wxEventHashTable::HandleEvent(wxEvent&, >>>> wxEvtHandler*) () from /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #24 0x00007ffff633dde7 in wxEvtHandler::ProcessEvent(wxEvent&) () from >>>> /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #25 0x00007ffff633dd70 in wxEvtHandler::ProcessEvent(wxEvent&) () from >>>> /usr/local/lib/libwx_baseu-2.8.so.0 >>>> #26 0x00007ffff6c2f7b5 in gtk_menu_clicked_callback () from >>>> /usr/local/lib/libwx_gtk2u_core-2.8.so.0 >>>> #27 0x00007ffff3b5b3b8 in g_closure_invoke () from >>>> /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 >>>> >>>> We will check for Mac OS X environment and keep you updated. >>>> >>>> Thanks, >>>> Neel Patel >>>> >>>> >>>> On Fri, Feb 12, 2016 at 8:51 PM, Dave Page <dp...@pgadmin.org> wrote: >>>> >>>>> >>>>> >>>>> On Thu, Feb 11, 2016 at 2:22 PM, Sergey Busel <sbu...@gmail.com> >>>>> wrote: >>>>> >>>>>> Added the query name to history entries. Please note that history >>>>>> entries are not modified if user saves [Query 1] to file [foo.sql]. I >>>>>> don't >>>>>> think that would be practical. >>>>>> >>>>> >>>>> Thanks. So I was just about to commit this, when it crashed on me. It >>>>> seems to happen only if there are at least 2 non-dirty tabs open (easy to >>>>> reproduce - open the query tool, add a second tab, then close the window). >>>>> I've fiddled around for a couple of hours, but not been able to get to the >>>>> bottom of it despite trying a few tricks that sometimes help avoid weird >>>>> issues with wxWidgets. There's a stack trace below. >>>>> >>>>> Ashesh, Neel, Sanket, Akshay - can any of you take a quick look on an >>>>> OSX system? I've attached a slightly cleaned up patch, removing some >>>>> commented code and making it a git-diff against master. >>>>> >>>>> Thanks. >>>>> >>>>> Thread 0 Crashed:: Dispatch queue: com.apple.main-thread >>>>> 0 org.postgresql.pgadmin3 0x0036ce4f >>>>> wxWindowBase::GetParent() const + 15 (window.h:590) >>>>> 1 libwx_macud_core-2.8.0.dylib 0x01ea6c0b >>>>> wxControlContainer::SetLastFocus(wxWindow*) + 81 >>>>> 2 libwx_macud_core-2.8.0.dylib 0x01faf8c0 >>>>> wxPanel::OnChildFocus(wxChildFocusEvent&) + 50 >>>>> 3 libwx_base_carbonud-2.8.0.dylib 0x0254b984 >>>>> wxAppConsole::HandleEvent(wxEvtHandler*, void (wxEvtHandler::*)(wxEvent&), >>>>> wxEvent&) const + 102 >>>>> 4 libwx_base_carbonud-2.8.0.dylib 0x02634023 >>>>> wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&, >>>>> wxEvtHandler*, wxEvent&) + 391 >>>>> 5 libwx_base_carbonud-2.8.0.dylib 0x026364ef >>>>> wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*) + 221 >>>>> 6 libwx_base_carbonud-2.8.0.dylib 0x02635716 >>>>> wxEvtHandler::ProcessEvent(wxEvent&) + 388 >>>>> 7 libwx_base_carbonud-2.8.0.dylib 0x02634bc8 >>>>> wxEvtHandler::ProcessPendingEvents() + 302 >>>>> 8 libwx_base_carbonud-2.8.0.dylib 0x0254c6d8 >>>>> wxAppConsole::ProcessPendingEvents() + 232 >>>>> 9 libwx_base_carbonud-2.8.0.dylib 0x02629ea3 >>>>> wxMacProcessNotifierAndPendingEvents + 35 >>>>> 10 libwx_macud_core-2.8.0.dylib 0x01d6f2c1 >>>>> wxApp::MacHandleOneEvent(void*) + 97 >>>>> 11 libwx_macud_core-2.8.0.dylib 0x01d6f3ce wxApp::MacDoOneEvent() >>>>> + 246 >>>>> 12 libwx_macud_core-2.8.0.dylib 0x01da07fd wxEventLoop::Dispatch() >>>>> + 57 >>>>> 13 libwx_macud_core-2.8.0.dylib 0x01ed46c1 >>>>> wxEventLoopManual::Run() + 421 >>>>> 14 libwx_macud_core-2.8.0.dylib 0x01e885b4 wxAppBase::MainLoop() + >>>>> 98 >>>>> 15 libwx_macud_core-2.8.0.dylib 0x01e87a6a wxAppBase::OnRun() + 52 >>>>> 16 libwx_base_carbonud-2.8.0.dylib 0x025ac782 wxEntry(int&, >>>>> wchar_t**) + 258 >>>>> 17 libwx_base_carbonud-2.8.0.dylib 0x025ac96d wxEntry(int&, char**) >>>>> + 77 >>>>> 18 org.postgresql.pgadmin3 0x00128354 main + 36 >>>>> (pgAdmin3.cpp:126) >>>>> 19 org.postgresql.pgadmin3 0x00106705 start + 53 >>>>> >>>>> >>>>>> >>>>>> >>>>>> On Wed, Feb 10, 2016 at 8:28 AM, Dave Page <dp...@pgadmin.org> wrote: >>>>>> >>>>>>> Hi >>>>>>> >>>>>>> On Wed, Feb 10, 2016 at 12:14 AM, Sergey Busel <sbu...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Dave, >>>>>>>> >>>>>>>> Here is a patch that does display the query tab name in the title >>>>>>>> bar of the output pane. It seems to work with loading and saving the >>>>>>>> perspective, too. The trick is to restore the original text on the >>>>>>>> output >>>>>>>> pane before loading and saving the perspective, and put the query name >>>>>>>> back >>>>>>>> in there right after. >>>>>>>> >>>>>>>> Attached is the full patch, not the diff from the previous patch I >>>>>>>> sent. Let me know if you have other suggestions. >>>>>>>> >>>>>>> >>>>>>> That seems to solve the problem nicely :-) - Thanks! >>>>>>> >>>>>>> It does lead to one other issue that I can see - the History tab on >>>>>>> the results pane now shows the history for all query tabs, which seems a >>>>>>> little odd given that the other 3 tabs on the results panel are query >>>>>>> tab >>>>>>> specific. Unless there are better ideas, I think the best way to fix >>>>>>> this >>>>>>> is to include the current tab name in the history, e.g. >>>>>>> >>>>>>> -- Executing query [Query 1]: >>>>>>> SELECT version(); >>>>>>> Total query runtime: 16 msec >>>>>>> 1 row retrieved. >>>>>>> >>>>>>> -- Executing query [Query 2]: >>>>>>> SELECT * FROM pg_class >>>>>>> Total query runtime: 53 msec >>>>>>> 311 rows retrieved. >>>>>>> >>>>>>> -- Executing query [foo.sql]: >>>>>>> SELECT * from pg_attribute >>>>>>> Total query runtime: 245 msec >>>>>>> 2399 rows retrieved. >>>>>>> >>>>>>> What do you think? >>>>>>> >>>>>>> >>>>>>>> Regards. >>>>>>>> >>>>>>>> On Fri, Feb 5, 2016 at 7:46 AM, Dave Page <dp...@pgadmin.org> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> On Wed, Feb 3, 2016 at 3:07 AM, Sergey Busel <sbu...@gmail.com> >>>>>>>>> wrote: >>>>>>>>> > - Removed unused/commented code. >>>>>>>>> > - Tab names now reflect the file name, if such is associated >>>>>>>>> with a tab. >>>>>>>>> > - Removed the "Close Tab" menu item. Added X button to the >>>>>>>>> active tab. >>>>>>>>> > - To tell the user which tab results are related to and to avoid >>>>>>>>> messing >>>>>>>>> > with perspective, the name of the related tab is now displayed >>>>>>>>> as "Data >>>>>>>>> > Output [Query 1]" in the output pane. If the tab is named after >>>>>>>>> a file, file >>>>>>>>> > name will display in the square brackets. If the file name is >>>>>>>>> longer then 15 >>>>>>>>> > chars, it will be truncated to 15 chars. >>>>>>>>> > >>>>>>>>> > Let me know any other suggestions you may have. >>>>>>>>> >>>>>>>>> Thanks - this seems to be working nicely for me. It would be good >>>>>>>>> if >>>>>>>>> the query name could be displayed in the title bar of the output >>>>>>>>> pane >>>>>>>>> rather than on the results tab (because it really does apply to all >>>>>>>>> tabs), but I don't see any sensible way to do that given the weird >>>>>>>>> way >>>>>>>>> that wxAUI stores it's perspectives. >>>>>>>>> >>>>>>>>> Ashesh, any ideas? >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Dave Page >>>>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>>>> Twitter: @pgsnake >>>>>>>>> >>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Dave Page >>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>> Twitter: @pgsnake >>>>>>> >>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>> The Enterprise PostgreSQL Company >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Dave Page >>>>> Blog: http://pgsnake.blogspot.com >>>>> Twitter: @pgsnake >>>>> >>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>> The Enterprise PostgreSQL Company >>>>> >>>> >>>> >>> >> >> >> -- >> Dave Page >> Blog: http://pgsnake.blogspot.com >> Twitter: @pgsnake >> >> EnterpriseDB UK: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> > > -- Dave Page Blog: http://pgsnake.blogspot.com Twitter: @pgsnake EnterpriseDB UK: http://www.enterprisedb.com The Enterprise PostgreSQL Company
sqltabs-dave2.patch
Description: Binary data
-- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers