Re: [HACKERS] PostgreSQL libraries - PThread Support, but - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: [HACKERS] PostgreSQL libraries - PThread Support, but |
Date | |
Msg-id | 200306141820.h5EIKiO15390@candle.pha.pa.us Whole thread Raw |
In response to | Re: [HACKERS] PostgreSQL libraries - PThread Support, but (Lee Kindness <lkindness@csl.co.uk>) |
Responses |
Re: [HACKERS] PostgreSQL libraries - PThread Support, but
|
List | pgsql-patches |
This patch handles two more gethostbyname calls. --------------------------------------------------------------------------- Lee Kindness wrote: Content-Description: message body text > Patch attached, along with new libpq-reentrant.c and libpq-reentrant.h > files for src/interfaces/libpq. > > Also at http://services.csl.co.uk/postgresql/ > > Thanks, Lee. > > Lee Kindness writes: > > Ok guys, I propose that the new libpq diff and 2 source files which > > i'll soon send to pgsql-patches is applied to the source. This diff is > > a cleaned up version of the previous version with the wrapper > > functions moved out into their own file and more comments added. Also > > the use of crypt_r() has been removed (not worth the effort), the > > cpp defines have been renamed to be consistent with each other and > > Tom's concerns with loose #defines has been partly addressed. > > > > This diff does not include any configure changes. I plan to tackle > > this separately ASAP, and hopefully produce something more acceptable. > > > > I will add checks for appropriate compiler thread flags (for compiling > > libpq, and alow the removal of #defines in libpq-reentrant.h), and > > link flags & libs (for a planned threaded libpq test program and > > renentrant ecpg library). If a thread environment is found then check > > for the reentrant functions will be done. > > > > Looking at various open source projects configure.in files there seems > > to be little commonality in the thread test macros (telp gratefully > > accepted!), I currently think that something like the approach used by > > glib is most suitable (switch on OS). > > > > All sound acceptable? > > > > Thanks, Lee. > > > > Peter Eisentraut writes: > > > Lee Kindness writes: > > > > > > > Patches attached to make libpq thread-safe, now uses strerror_r(), > > > > gethostbyname_r(), getpwuid_r() and crypt_r() where available. Where > > > > strtok() was previously used strchr() is now used. > > > > > > AC_TRY_RUN tests are prohibited. Also, try to factor out some of these > > > huge tests into separate macros and put them into config/c-library.m4. > > > And it would be nice if there was some documentation about what was > > > checked for. If you just want to check whether gethostbyname_r() has 5 or > > > 6 arguments you can do that in half the space. > [ Attachment, skipping... ] [ Attachment, skipping... ] [ Attachment, skipping... ] -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/interfaces/libpq/fe-secure.c =================================================================== RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-secure.c,v retrieving revision 1.24 diff -c -c -r1.24 fe-secure.c *** src/interfaces/libpq/fe-secure.c 14 Jun 2003 17:49:54 -0000 1.24 --- src/interfaces/libpq/fe-secure.c 14 Jun 2003 18:08:54 -0000 *************** *** 453,460 **** if (addr.sa_family == AF_UNIX) return 0; /* what do we know about the peer's common name? */ ! if ((h = gethostbyname(conn->peer_cn)) == NULL) { printfPQExpBuffer(&conn->errorMessage, libpq_gettext("could not get information about host (%s): %s\n"), --- 453,469 ---- if (addr.sa_family == AF_UNIX) return 0; + { + struct hostent hpstr; + char buf[BUFSIZ]; + int herrno = 0; + + pqGethostbyname(conn->peer_cn, &hpstr, buf, sizeof(buf), + &h, &herrno); + } + /* what do we know about the peer's common name? */ ! if ((h == NULL) { printfPQExpBuffer(&conn->errorMessage, libpq_gettext("could not get information about host (%s): %s\n"), Index: src/port/getaddrinfo.c =================================================================== RCS file: /cvsroot/pgsql-server/src/port/getaddrinfo.c,v retrieving revision 1.7 diff -c -c -r1.7 getaddrinfo.c *** src/port/getaddrinfo.c 12 Jun 2003 08:15:29 -0000 1.7 --- src/port/getaddrinfo.c 14 Jun 2003 18:08:55 -0000 *************** *** 84,91 **** --- 84,99 ---- else { struct hostent *hp; + #ifdef FRONTEND + struct hostent hpstr; + char buf[BUFSIZ]; + int herrno = 0; + pqGethostbyname(node, &hpstr, buf, sizeof(buf), + &hp, &herrno); + #else hp = gethostbyname(node); + #endif if (hp == NULL) { switch (h_errno)
pgsql-patches by date: