Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id B510F476685 for ; Tue, 7 Jan 2003 22:08:11 -0500 (EST) Received: from news.hub.org (news.hub.org [64.49.215.80]) by postgresql.org (Postfix) with ESMTP id 4C327475EB9 for ; Tue, 7 Jan 2003 22:08:11 -0500 (EST) Received: by news.hub.org (Postfix, from userid 8) id 3EB6043A941; Tue, 7 Jan 2003 22:08:11 -0500 (EST) From: ljb X-Newsgroups: comp.databases.postgresql.interfaces Subject: Re: still memory leaks with libpgtcl Date: Wed, 8 Jan 2003 03:08:11 +0000 (UTC) Organization: Hub.Org Networking Services (http://www.hub.org) Lines: 40 Message-ID: References: X-Complaints-To: usenet@news.hub.org User-Agent: slrn/0.9.7.3 (Linux) To: pgsql-interfaces@postgresql.org X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200301/31 X-Sequence-Number: 3531 g.hintermayer@inode.at wrote: >... > If I'd track down the problem and sent a patch, has the wheel to be reinvented > for gborg ? Two concurrent developments is not a good thing. Did you see Tom Lane's reply on this thread? The problem is known but fixing the leak causes a crash. The code is in libpgtcl/pgtclId.c; look for this comment: * XXX Unfortunately, while this works fine if we are closing due to * explicit pg_disconnect, Tcl versions through 8.3.3 dump core if we * try to do it during interpreter shutdown. Not clear why, or if * there is a workaround. For now, accept leakage of the (fairly * small) amount of memory taken for the channel state representation. I've confirmed that the crash occurs with Tcl 8.3.4 also. But I've got a patch which seems to fix it - that is, it neither leaks on disconnect nor crashes on shutdown after my patch is applied. At least it doesn't with my extremely minimal testing. If you want to try this, go ahead. This patch is seriously ugly and 'highly suspect', and I am NOT suggesting this be included in the PostgreSQL release. Really. But it works. Maybe. (This is for PostgreSQL-7.3.1) --- src/interfaces/libpgtcl/pgtclId.c.bak 2002-10-17 10:53:32.000000000 -0400 +++ src/interfaces/libpgtcl/pgtclId.c 2003-01-07 21:51:53.000000000 -0500 @@ -300,12 +300,10 @@ * small) amount of memory taken for the channel state representation. * Note we are not leaking a socket, since libpq closed that already. */ -#ifdef NOT_USED #if TCL_MAJOR_VERSION >= 8 - if (connid->notifier_channel != NULL) + if (connid->notifier_channel != NULL && interp != NULL) Tcl_UnregisterChannel(NULL, connid->notifier_channel); #endif -#endif /* * We must use Tcl_EventuallyFree because we don't want the connid