Re: lib problems

From: "Andrew Dunstan" <andrew(at)dunslane(dot)net>
To: "PostgreSQL Win32 port list" <pgsql-hackers-win32(at)postgresql(dot)org>
Subject: Re: lib problems
Date: 2003-10-10 03:13:55
Message-ID: 01b401c38edc$8a6b1a10$6401a8c0@DUNSLANE
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers-win32


Actually, I think I can live with the message - it's only called if initdb
fails and is cleaning up.

1 second seems far too short - 3 seconds would be a minimum, I think.

Also, looping forever on this seems dangerous. Shouldn't we just give up
after some substantial number of tries to unlink the file? After all, on
Unix we expect unlink to return immediately on failure, although we don't
expect as many failures as this gets around :-)

cheers

andrew

----- Original Message -----
From: "Bruce Momjian" <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: "Andrew Dunstan" <andrew(at)dunslane(dot)net>
Cc: "PostgreSQL Win32 port list" <pgsql-hackers-win32(at)postgresql(dot)org>
Sent: Thursday, October 09, 2003 9:21 PM
Subject: Re: [pgsql-hackers-win32] lib problems

> Andrew Dunstan wrote:
> > If FRONTEND is defined port/dirmod.c prints to stderr, and if not it
wants
> > to call elog(). I want something that fails silently and sets errno,
just
> > like I would expect a "real" unlink to do.
> >
> > At any rate, what I have below has not failed yet in my testing.
>
> Well maybe throwing a message after one second is extreme. Should we
> change it to 3 or 5 seconds? Does that help? I would like to see you
> using our standard code, and I would like to throw a message after a few
> seconds so folks know we are waiting for something.
>
> --------------------------------------------------------------------------
-
>
>
> >
> > cheers
> >
> > andrew
> >
> >
> > ----- Original Message -----
> > From: "Bruce Momjian" <pgman(at)candle(dot)pha(dot)pa(dot)us>
> > To: "Andrew Dunstan" <andrew(at)dunslane(dot)net>
> > Cc: "PostgreSQL Win32 port list" <pgsql-hackers-win32(at)postgresql(dot)org>
> > Sent: Thursday, October 09, 2003 8:32 PM
> > Subject: Re: [pgsql-hackers-win32] lib problems
> >
> >
> > >
> > > Again, -DFRONTEND is the solution. libpq or psql use that already.
> > >
> >
> --------------------------------------------------------------------------
> > -
> > >
> > > Andrew Dunstan wrote:
> > > >
> > > > For now I have got around this with the following code:
> > > >
> > > > #ifdef WIN32
> > > >
> > > > #ifdef unlink
> > > > #undef unlink
> > > > #endif
> > > >
> > > > static int
> > > > init_unlink(const char *path)
> > > > {
> > > > while (unlink(path))
> > > > {
> > > > if (errno != EACCES)
> > > > return -1;
> > > > Sleep(100); /* ms */
> > > > }
> > > > return 0;
> > > > }
> > > >
> > > > #define unlink(x) init_unlink((x))
> > > >
> > > > #endif
> > > >
> > > > cheers
> > > >
> > > > andrew
> > > >
> > > > ----- Original Message -----
> > > > From: Andrew Dunstan
> > > > To: PostgreSQL Win32 port list
> > > > Sent: Thursday, October 02, 2003 10:59 PM
> > > > Subject: [pgsql-hackers-win32] lib problems
> > > >
> > > >
> > > >
> > > > OK, I have a C version of initdb that apparently works fine on
Unix,
> > and is only missing signal handling. (If anyone is curious and/or
> > adventurous I can email you a copy).
> > > >
> > > > When I compile on W32/Mingw I get this:
> > > >
> > > > $ make
> > > >
> >
> >
> >
gcc -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -DPGBINDIR=\"/usr/
> >
local/pgsql/bin\" -DPGDATADIR=\"/usr/local/pgsql/share\" -L../../../src/port
> > initdb.o -lpgport -o initdb
> > > > ../../../src/port/libpgport.a(dirmod.o)(.text+0xe1):dirmod.c:
> > undefined reference to `errstart'
> > > > ../../../src/port/libpgport.a(dirmod.o)(.text+0xef):dirmod.c:
> > undefined reference to `elog_finish'
> > > > ../../../src/port/libpgport.a(dirmod.o)(.text+0x11a):dirmod.c:
> > undefined reference to `errstart'
> > > > ../../../src/port/libpgport.a(dirmod.o)(.text+0x128):dirmod.c:
> > undefined reference to `elog_finish'
> > > > ../../../src/port/libpgport.a(dirmod.o)(.text+0x1df):dirmod.c:
> > undefined reference to `errstart'
> > > > ../../../src/port/libpgport.a(dirmod.o)(.text+0x1ef):dirmod.c:
> > undefined reference to `elog_finish'
> > > > ../../../src/port/libpgport.a(dirmod.o)(.text+0x21a):dirmod.c:
> > undefined reference to `errstart'
> > > > ../../../src/port/libpgport.a(dirmod.o)(.text+0x22a):dirmod.c:
> > undefined reference to `elog_finish'
> > > > make: *** [initdb] Error 1
> > > >
> > > > The strange thing is I didn't get that this morning, but I assume
it's
> > clearly because I added some unlink calls.
> > > >
> > > > Anyone have clues about how to fix this? Compile a copy of
dirmod.c
> > with FRONTEND defined, maybe? Or just remove the logging statements from
> > pgunlink altogether - unlink should really be silent.
> > > >
> > > > BTW, if the W32 timing problems that apply to unlink() also apply
to
> > rmdir(), we'll need a replacement for that too.
> > > >
> > > > thanks
> > > >
> > > > andrew
> > >
> > > --
> > > Bruce Momjian | http://candle.pha.pa.us
> > > pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
> > > + If your life is a hard drive, | 13 Roberts Road
> > > + Christ can be your backup. | Newtown Square, Pennsylvania
> > 19073
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 8: explain analyze is your friend
> >
>
> --
> Bruce Momjian | http://candle.pha.pa.us
> pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
> + If your life is a hard drive, | 13 Roberts Road
> + Christ can be your backup. | Newtown Square, Pennsylvania
19073
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

In response to

Responses

Browse pgsql-hackers-win32 by date

  From Date Subject
Next Message Bruce Momjian 2003-10-10 03:29:32 Re: lib problems
Previous Message Bruce Momjian 2003-10-10 02:07:42 Re: [HACKERS] initdb