Re: pgstat: remove delayed destroy / pipe: - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: pgstat: remove delayed destroy / pipe:
Date
Msg-id 200605070139.k471dxm12857@candle.pha.pa.us
Whole thread Raw
In response to Re: pgstat: remove delayed destroy / pipe:  ("Magnus Hagander" <mha@sollentuna.net>)
Responses Re: pgstat: remove delayed destroy / pipe:  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-patches
Magnus Hagander wrote:
> > It turns out the problem is that port/pipe.c is compiled with
> > -DFRONTEND and include/port/win32.h wraps the recv to
> > pgwin32_recv macro in a #ifndef FRONTEND.  We've actually
> > been using the WinSock recv function directly (verified with gcc -E).
>
> That's definitly wrong.
> Looks like this file needs a _srv version in the Makefile.  Bruce?

Wow!  That is disturbing.  I tried to minimize the affect of FRONTEND,
but obviously I never though about the affect on include files that use
FRONTEND.  Seems it is only Win32 that used FRONTEND in includes (except
for pg_wchar.h, which is used by libpq and already built independently).

> Just a thought - might this affect more things that rely on FRONTEND
> defines in the headers? How bad would it be to just make libpgport build
> two complete sets of object files, one for server and one for frontend,
> instead of special-casing which files are rebuilt?

The attached patch does exactly what you suggest.  I think it has to be
patched to 8.0.X, 8.1.X, and HEAD.  I will apply in 24-48 hours.

--
  Bruce Momjian   http://candle.pha.pa.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
Index: src/port/Makefile
===================================================================
RCS file: /cvsroot/pgsql/src/port/Makefile,v
retrieving revision 1.30
diff -c -c -r1.30 Makefile
*** src/port/Makefile    9 Dec 2005 21:19:36 -0000    1.30
--- src/port/Makefile    7 May 2006 01:05:32 -0000
***************
*** 26,37 ****
  override CPPFLAGS := -I$(top_builddir)/src/port -DFRONTEND $(CPPFLAGS)
  LIBS += $(PTHREAD_LIBS)

! # Replace object files that use FRONTEND define
! LIBOBJS_SRV := $(LIBOBJS)
! LIBOBJS_SRV := $(patsubst dirmod.o,dirmod_srv.o, $(LIBOBJS_SRV))
! LIBOBJS_SRV := $(patsubst exec.o,exec_srv.o, $(LIBOBJS_SRV))
! LIBOBJS_SRV := $(patsubst getaddrinfo.o,getaddrinfo_srv.o, $(LIBOBJS_SRV))
! LIBOBJS_SRV := $(patsubst thread.o,thread_srv.o, $(LIBOBJS_SRV))

  all: libpgport.a libpgport_srv.a

--- 26,33 ----
  override CPPFLAGS := -I$(top_builddir)/src/port -DFRONTEND $(CPPFLAGS)
  LIBS += $(PTHREAD_LIBS)

! # Replace all object files so they use FRONTEND define
! LIBOBJS_SRV := $(LIBOBJS:%.o=%_srv.o)

  all: libpgport.a libpgport_srv.a

***************
*** 60,72 ****
  libpgport_srv.a: $(LIBOBJS_SRV)
      $(AR) $(AROPT) $@ $^

! dirmod_srv.o: dirmod.c
!     $(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@
!
! exec_srv.o: exec.c
!     $(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@
!
! getaddrinfo_srv.o: getaddrinfo.c
      $(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@

  # No thread flags for server version
--- 56,62 ----
  libpgport_srv.a: $(LIBOBJS_SRV)
      $(AR) $(AROPT) $@ $^

! %_srv.o: %.c
      $(CC) $(CFLAGS) $(subst -DFRONTEND,, $(CPPFLAGS)) -c $< -o $@

  # No thread flags for server version

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [PATCH] Add support for GnuTLS
Next
From: Bruce Momjian
Date:
Subject: Re: pgstat: remove delayed destroy / pipe: socket error fix