> From: Stuart Henderson <st...@openbsd.org>
> Date: Mon, Oct 20, 2014 at 7:08 PM
> Subject: Re: databases/pgadmin3 is crashing on amd64
> To: David Coppa <dco...@gmail.com>
> Cc: janis <ja...@cieti.lv>, OpenBSD Ports <ports@openbsd.org>
> 
> 
> On 2014/10/20 17:25, David Coppa wrote:
> > On Mon, Oct 20, 2014 at 3:27 PM, janis <ja...@cieti.lv> wrote:
> > > Hello,
> > >
> > > databases/pgadmin3 is still broken. Here is a backtrace:
> >
> > Somewhere, it's trying to unlock an unlocked mutex...
> 
> I didn't see this before (I am able to make a new connection, connect, and
> browse around the db, without hitting it) but I can reproduce it by
> right-clicking
> on a server name. 1.16.1 does work so it seems it was introduced in 1.18.x.
> 
> Diffing the source...(oh great...not relevant to this, but they have their
> own embedded copy of libssh2...) it looks like it may be in the connection
> cancelling code in pgConn.cpp. I'm clearly missing something with how this
> works with wxWidgets though as I only see locks not unlocks in the pgadmin
> code.
> 
> Running with RTHREAD_DEBUG=5 I see lock/unlock/lock/unlock/unlock for the
> relevant mutex but not sure how to lookup which mutex is involved, at least
> "info symbol <addr>" doesn't help.

Can you try the diff below?

Index: Makefile
===================================================================
RCS file: /cvs/ports/databases/pgadmin3/Makefile,v
retrieving revision 1.29
diff -u -p -u -p -r1.29 Makefile
--- Makefile    30 Apr 2014 14:20:08 -0000      1.29
+++ Makefile    21 Oct 2014 12:26:35 -0000
@@ -3,7 +3,7 @@
 COMMENT=       administration and development platform for PostgreSQL
 
 V=             1.18.1
-REVISION=      0
+REVISION=      1
 DISTNAME=      pgadmin3-$V
 CATEGORIES=    databases devel
 
Index: patches/patch-pgadmin_frm_events_cpp
===================================================================
RCS file: patches/patch-pgadmin_frm_events_cpp
diff -N patches/patch-pgadmin_frm_events_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-pgadmin_frm_events_cpp        21 Oct 2014 12:26:35 -0000
@@ -0,0 +1,20 @@
+$OpenBSD$
+
+If the if() clause is false, Unlock() will be called on an already
+unlocked mutex
+
+--- pgadmin/frm/events.cpp.orig        Fri Sep 27 16:51:46 2013
++++ pgadmin/frm/events.cpp     Tue Oct 21 14:26:04 2014
+@@ -746,9 +746,10 @@ void frmMain::OnSelRightClick(wxTreeEvent &event)
+               currentObject = browser->GetObject(item);
+       }
+ 
+-      if (currentObject)
++      if (currentObject) {
+               doPopup(browser, event.GetPoint(), currentObject);
+-      s_currentObjectMutex.Unlock();
++              s_currentObjectMutex.Unlock();
++      }
+ }
+ 
+ 

Reply via email to