Re: Loaded footgun open_datasync on Windows

Amit Kapila <amit.kapila16@gmail.com>

From: Amit Kapila <amit.kapila16@gmail.com>
To: Laurenz Albe <laurenz.albe@cybertec.at>
Cc: Kuntal Ghosh <kuntalghosh.2007@gmail.com>, Michael Paquier <michael@paquier.xyz>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2018-06-08T02:55:22Z
Lists: pgsql-hackers
On Fri, Jun 8, 2018 at 7:48 AM, Laurenz Albe <laurenz.albe@cybertec.at>
wrote:

> Amit Kapila wrote:
> > On Wed, Jun 6, 2018 at 3:06 PM, Kuntal Ghosh <kuntalghosh.2007@gmail.com>
> wrote:
> > > It seems the "#ifndef FRONTEND" restriction was added around
> > > pgwin32_open() for building libpq with Visual C++ or Borland C++.  The
> > > restriction was added in commit 422d4819 to build libpq with VC++[1].
> > > Later, in commit fd7c3f67e0bc4, the support for Borland C++ was also
> > > added.
> > >
> > > So, I'm not sure whether removing that restriction will work for all
> > > front-end modules.
> > >
> >
> > Thanks for doing investigation.  I agree with you that it appears from
> the old
> > discussion that we have added this restriction to build libpq/psql
> (basically frontend)
> > modules.  However, I tried to build those modules on windows by removing
> that
> > restriction and it doesn't give me any problem (except one extra
> argument error,
> > which can be easily resolved).  It might be that it gives problem with
> certain
> > version of MSVC.  I think if we want to pursue this direction, one needs
> to verify
> > on various supportted versions (of Windows) to see if things are okay.
>
> That's what the buildfarm is for, right?
>
> > Speaking about the issue at-hand, one way to make pg_test_fsync work in
> to just
> > include c.h and remove inclusion of postgres_fe.h, but not sure if that
> is the best way.
> > I am not sure if we have any other options to proceed in this case.
> >
> > Thoughts?
>
> I thought of a better way.
> pg_test_fsync is properly listed as a server application in the
> documentation,
> so I think it should be built as such, as per the attached patch.
>

-#include "postgres_fe.h"
+#include "postgres.h"

I don't think that server application can use backend environment unless it
is adapted to do so.  I think the application should have the capability to
deal with backend stuff like ereport, elog etc, if we don't want to use
FRONTEND environment.  The other server applications like pg_ctl.c,
initdb.c, etc. also uses FRONTEND environment.

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

Commits

  1. Allow concurrent-safe open() and fopen() in frontend code for Windows

  2. Fix inclusions of c.h from .h files.

  3. Allow borland compiles.

  4. Corrects issues recently posted by Dann Corbit, allowing libpq/psql to