pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Invent a variant of getopt(3) that is thread-safe
Date: Mon, 30 Mar 2026 17:50:26 +0000
Message-ID: <E1w7Gkr-002BNj-1M@gemulon.postgresql.org> (raw)

Invent a variant of getopt(3) that is thread-safe

The standard getopt(3) function is not re-entrant nor thread-safe.
That's OK for current usage, but it's one more little thing we need to
change in order to make the server multi-threaded.

There's no standard getopt_r() function on any platform, I presume
because command line arguments are usually parsed early when you start
a program, before launching any threads, so there isn't much need for
it. However, we call it at backend startup to parse options from the
startup packet. Because there's no standard, we're free to define our
own.

The pg_getopt_start/next() implementation is based on the old getopt
implementation, I just gathered all the state variables to a struct.
The non-re-entrant getopt() function is now a wrapper around the
re-entrant variant, on platforms that don't have getopt(3).
getopt_long() is not used in the server, so we don't need to provide a
re-entrant variant of that.

Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Discussion: https://www.postgresql.org/message-id/d1da5f0e-0d68-47c9-a882-eb22f462752f@iki.fi

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/fd8e3f7ceeed8b0155e124a0da4ec6a4fb53ec1f

Modified Files
--------------
src/include/port/pg_getopt_ctx.h |  39 +++++++++++
src/port/Makefile                |   1 +
src/port/getopt.c                |  91 ++++++--------------------
src/port/meson.build             |   1 +
src/port/pg_getopt_ctx.c         | 136 +++++++++++++++++++++++++++++++++++++++
src/tools/pgindent/typedefs.list |   1 +
6 files changed, 199 insertions(+), 70 deletions(-)



Message-ID: <E1w7Gkr-002BNj-1M@gemulon.postgresql.org>
Permalink:  ../E1w7Gkr-002BNj-1M@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1w7Gkr-002BNj-1M@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: heikki.linnakangas@iki.fi, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Invent a variant of getopt(3) that is thread-safe
  In-Reply-To: <E1w7Gkr-002BNj-1M@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox