Fw: dlopen Solaris memory leaks

Ben Goodwin ben@atomicmatrix.net
Fri Sep 13 00:46:00 GMT 2002


Sending again, I didn't get any responses...

----- Original Message -----
From: "Ben Goodwin" <ben@atomicmatrix.net>
To: <gcc-bugs@gcc.gnu.org>
Sent: Wednesday, September 04, 2002 11:24 PM
Subject: dlopen Solaris memory leaks


> I've been hunting down a memory leak that my library, which gets
> dlopened/closed numerous times in any given instance of a program, seems
to
> incurr.  I've been able to recreate the leak with minimal code.  At first
I
> thought it was a Solaris bug, but I tried compiling the same code with
> SUNWspro (sun's cc) and the leak goes away.  So, naturally, I come here.
> Basically the program 'tst' dlopens 'tstlib', runs a routine called 'doit'
> from 'tstlib', dlcloses 'tstlib', and repeats.  This causes a memory leak
in
> 'tst'.  I've reproduced this with gcc 2.95.3, 3.0.2, and 3.1 on Solaris
> 8/x86, Solaris 8/sparc, and Solaris 9/sparc.  Again, SUNWspro (version
info
> below) doesn't produce a leaking executeable/dlopen library.  Perhaps I'm
> doing something wrong (and as such, so is libtool), or perhaps there's
> really a bug here.  I'm using the system's 'ld' linker (like libtool
does),
> though I've tried using gcc -shared with the same results.
> Note that not all routines cause this memory leak.  The only one I *know*
> about is getservbyname(), but I also know there are others, as dlopening
> MySQL (and running mysql_init/close) causes leaks even if I comment out
all
> getservbyname() calls.  Before I paste version info/code, I'd like to
state
> I'm willing to do more debugging here, but this goes beyond my immediate
> know-how.  Please let me know how I can help more, if necessary.
> Note also that this leak does not occur on my RedHat 7.3/intel machine.
> I'm attaching the *.i* files as well.
> Thanks!
>
>     -=| Ben
>
> ====
>
> SUNWspro 'cc -V' output
>
>  > cc -V
> ucbcc: Sun WorkShop 6 update 1 C 5.2 2000/09/11
> ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.275
>
> Serveral gcc versions; The Solaris 9 box was wiped so I don't have that
info
> handy - but it was a Sun FreeWare installation.
>
>  /* Sourceforge compile farm - From the path name it's obvious this is a
Sun
> FreeWare installation.  I don't know anything else about how it was
> configured/installed. */
>  > gcc -v
> Reading specs from /opt/sfw/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/specs
> gcc version 2.95.3 20010315 (release)
>
>  > gcc -v
> Reading specs from /usr/local/lib/gcc-lib/i386-pc-solaris2.8/3.1/specs
> Configured with:
>
../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-n
> ls
> Thread model: posix
> gcc version 3.1
>
> > gcc -v
> Reading specs from /usr/local/lib/gcc-lib/sparcv9-sun-solaris2/3.0.2/specs
> Configured with:
> ../gcc-3.0.2/configure --prefix=/usr/local --enable-languages=all
> sparcv9-sun-solaris2
> Thread model: posix
> gcc version 3.0.2
>
>
>
> Here's the code.
>
> /* tst.c */
> #include <stdio.h>
> #include <dlfcn.h>
>
> #define MYLIB "/export/home/ben/dl/tstlib.so.1"
>
> int main (void)
> {
>   void *handle;
>   int (*a)(void);
>   char *error;
>
>   while (1)
>     {
>       handle = dlopen (MYLIB, RTLD_LAZY);
>       if (!handle)
>         {
>           fputs (dlerror(), stderr);
>           exit (1);
>         }
>
>       a = dlsym (handle, "doit");
>       if ((error = dlerror ()) != NULL)
>         {
>           fprintf (stderr, "%s\n", error);
>           exit (1);
>         }
>         (*a)();
>
>       dlclose (handle);
>     }
> }
>
> /* tstlib.c */
>
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <netdb.h>
>
> static struct servent *serv_ptr;
> static char *f;
>
> void doit (void)
> {
>    if ((serv_ptr = getservbyname("telnet", "tcp")) == NULL)
>      {
>         printf("oops\n");
>      }
> }
>
>
> /* Compiled with */
>
> gcc -g -o tst tst.c -ldl
> gcc -g -fPIC -DPIC -c tstlib.c -o tstlib.o
>
> /usr/ccs/bin/ld -G -h tstlib.so.1 -o tstlib.so.1 tstlib.o -lsocket -lnsl
>
> (or 'cc' - Sun's version)
>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ifiles.zip
Type: application/x-zip-compressed
Size: 14929 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-bugs/attachments/20020913/34c5bf49/attachment.bin>


More information about the Gcc-bugs mailing list