Re: frmEditGrid Crash testcase

Lists: pgadmin-hackers
From: "Robins Tharakan" <tharakan(at)gmail(dot)com>
To: pgadmin-hackers(at)postgresql(dot)org
Subject: frmEditGrid Crash testcase
Date: 2008-04-27 23:43:22
Message-ID: 36af4bed0804271643ve42b0cao167aced679436cd6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgadmin-hackers

Hi,

When we right click on the last row of a grid with very few rows (about
10-20), the application crashes to a halt with 'segmentation fault'.

I am unable to find a good solution, but of what I understand,
thread->IsRunning() fails when the thread is not actually running. Oddly,
this happens only for small tables and not for those containing greater than
... say 50-100 rows.

I tried the condition (thread & thread->IsRunning) and that fails too. Also
(thread->IsAlive()) meets with the same fate. How can we check whether the
thread is actually executing something or not, without actually causing a
segfault for such cases ?

If we remove this check altogether, this problem obviously gets resolved,
but of course, pgAdmin would then certainly crash if the user requests two
table refreshes back-to-back in quick succession.

Could anyone hint at what is the possible cause / solution to this issue ?
I am using v7237 (1.9 branch).

Regards,
*Robins Tharakan*

DEBUG report on one of my attempts to resolve such crashes.
--------------------------------------------------------
ASSERT INFO:
../include/wx/thrimpl.cpp(42): assert "m_internal" failed in Lock():
wxMutex::Lock(): not initialized

BACKTRACE:
[1] wxThread::IsRunning() cons)
[2] frmEditGrid::OnCellRightClick(wxGridEvent&)
/projects/pgadmin/40_line_numbers_in_sql_view/7/pgadmin/./frm/frmEditGrid.cpp:416
[3] wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&,
wxEvtHandler*, wxEvent&)
[4] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[5] wxEvtHandler::ProcessEvent(wxEvent&)
[6] wxEvtHandler::ProcessEvent(wxEvent&)
[7] wxWindowBase::TryParent(wxEvent&)
[8] wxEvtHandler::ProcessEvent(wxEvent&)
[9] wxEvtHandler::ProcessEvent(wxEvent&)
[10] wxScrollHelperEvtHandler::ProcessEvent(wxEvent&)
[11] wxGrid::SendEvent(int, int, int, wxMouseEvent&)
[12] wxGrid::ProcessGridCellMouseEvent(wxMouseEvent&)
[13] wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&,
wxEvtHandler*, wxEvent&)
[14] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[15] wxEvtHandler::ProcessEvent(wxEvent&)
[16] wxWindow::GTKProcessEvent(wxEvent&) cons)
[17] g_closure_invoke()
[18] g_signal_emit_valist()
[19] g_signal_emit()
[20] gtk_propagate_event()
[21] gtk_main_do_event()
[22] g_main_context_dispatch()
[23] g_main_loop_run()
[24] gtk_main()


From: "Dave Page" <dpage(at)pgadmin(dot)org>
To: "Robins Tharakan" <tharakan(at)gmail(dot)com>
Cc: pgadmin-hackers(at)postgresql(dot)org
Subject: Re: frmEditGrid Crash testcase
Date: 2008-04-29 08:07:36
Message-ID: 937d27e10804290107t372b7626m2601b877a5a8b8fd@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgadmin-hackers

On Mon, Apr 28, 2008 at 12:43 AM, Robins Tharakan <tharakan(at)gmail(dot)com> wrote:
> Hi,
>
> When we right click on the last row of a grid with very few rows (about
> 10-20), the application crashes to a halt with 'segmentation fault'.
>
> I am unable to find a good solution, but of what I understand,
> thread->IsRunning() fails when the thread is not actually running. Oddly,
> this happens only for small tables and not for those containing greater than
> ... say 50-100 rows.
>
> I tried the condition (thread & thread->IsRunning) and that fails too. Also
> (thread->IsAlive()) meets with the same fate. How can we check whether the
> thread is actually executing something or not, without actually causing a
> segfault for such cases ?
>
> If we remove this check altogether, this problem obviously gets resolved,
> but of course, pgAdmin would then certainly crash if the user requests two
> table refreshes back-to-back in quick succession.
>
> Could anyone hint at what is the possible cause / solution to this issue ?
> I am using v7237 (1.9 branch).

Hi Robins,

There are some nasty hacks in the debugger code to work around what
I've only been able to pin down as 'issues' in the wxWidgets threading
code. I wouldn't be at all surprised if you're seeing something
similar here - unfortunately I think the only thing you can do is get
far more familiar with GDB than anyone should ever have to :-(

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com