Thread

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Define PS_USE_CLOBBER_ARGV on GNU/Hurd.

  2. Remove obsolete platforms from ps_status.c.

  1. Dead code in ps_status.c

    Thomas Munro <thomas.munro@gmail.com> — 2023-02-16T03:52:33Z

    Hi,
    
    Here's some archeology I did a while back, but was reminded to post
    when I saw David's nearby performance improvements for ps_status.c.
    
     * there are no systems with HAVE_PS_STRINGS (ancient BSD)
     * setproctitle_fast() is in all live FreeBSD releases
     * setproctitle() is in all other BSDs
     * PostgreSQL can't run on GNU/Hurd apparently, for lack of shared
    sempahores, so who would even know if that works?
     * IRIX is rusting in peace
     * there are no other NeXT-derived systems (NeXTSTEP and OPENSTEP are departed)
    
    Therefore I think it is safe to drop the PS_USE_PS_STRING and
    PS_USE_CHANGE_ARGV code branches, remove a bunch of outdated comments
    and macro tests, and prune the defunct configure/meson probe.
    
    I guess (defined(sun) && !defined(BSD)) || defined(__svr5__) could be
    changed to just defined(sun) (surely there are no other living
    SysV-derived systems, and I think non-BSD Sun probably meant "Solaris
    but not SunOS"), but I don't know so I didn't touch that.
    
    I think the history here is that the ancient BSD sendmail code
    (conf.c) had all this stuff for BSD and SVR5 systems, but then its
    setproctitle() function actually moved into the OS so that the
    underlying PS_STRINGS stuff wouldn't have to be stable, and indeed it
    was not.
    
  2. Re: Dead code in ps_status.c

    Tom Lane <tgl@sss.pgh.pa.us> — 2023-02-16T05:34:00Z

    Thomas Munro <thomas.munro@gmail.com> writes:
    > Therefore I think it is safe to drop the PS_USE_PS_STRING and
    > PS_USE_CHANGE_ARGV code branches, remove a bunch of outdated comments
    > and macro tests, and prune the defunct configure/meson probe.
    
    Seems reasonable.  Patch passes an eyeball check.
    
    > I guess (defined(sun) && !defined(BSD)) || defined(__svr5__) could be
    > changed to just defined(sun) (surely there are no other living
    > SysV-derived systems, and I think non-BSD Sun probably meant "Solaris
    > but not SunOS"), but I don't know so I didn't touch that.
    
    Hm, is "defined(sun)" true on any live systems at all?
    
    			regards, tom lane
    
    
    
    
  3. Re: Dead code in ps_status.c

    Thomas Munro <thomas.munro@gmail.com> — 2023-02-16T06:16:14Z

    On Thu, Feb 16, 2023 at 6:34 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    > Thomas Munro <thomas.munro@gmail.com> writes:
    > > Therefore I think it is safe to drop the PS_USE_PS_STRING and
    > > PS_USE_CHANGE_ARGV code branches, remove a bunch of outdated comments
    > > and macro tests, and prune the defunct configure/meson probe.
    >
    > Seems reasonable.  Patch passes an eyeball check.
    
    Thanks for looking.
    
    > > I guess (defined(sun) && !defined(BSD)) || defined(__svr5__) could be
    > > changed to just defined(sun) (surely there are no other living
    > > SysV-derived systems, and I think non-BSD Sun probably meant "Solaris
    > > but not SunOS"), but I don't know so I didn't touch that.
    >
    > Hm, is "defined(sun)" true on any live systems at all?
    
    My GCC compile farm account seems to have expired, or something, so I
    couldn't check on wrasse's host (though whether wrasse is "live" is
    debatable: Solaris 11.3 has reached EOL, it's just that the CPU is too
    old to be upgraded, so it's not testing a real OS that anyone would
    actually run PostgreSQL on).  But from some googling[1], I think
    __sun, __sun__ and sun should all be defined.
    
    Ohh, but __svr5__ should not be.  Solaris boxes define __svr4__, I was
    confused by the two fives.  __svr5__ was SCO/Unixware, another dead
    OS[1], so I think we can just remove that one too.  So, yeah, I think
    we should replace (defined(sun) && !defined(BSD)) || defined(__svr5__)
    with defined(__sun).  (Hmph.  We have all of __sun__, __sun and sun in
    the tree.)
    
    [1] https://stackoverflow.com/questions/16618604/solaris-and-preprocessor-macros
    [2] https://en.wikipedia.org/wiki/UNIX_System_V#SVR5_/_UnixWare_7
    
    
    
    
  4. Re: Dead code in ps_status.c

    Tom Lane <tgl@sss.pgh.pa.us> — 2023-02-16T14:38:18Z

    Thomas Munro <thomas.munro@gmail.com> writes:
    > On Thu, Feb 16, 2023 at 6:34 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    >> Hm, is "defined(sun)" true on any live systems at all?
    
    > My GCC compile farm account seems to have expired, or something, so I
    > couldn't check on wrasse's host (though whether wrasse is "live" is
    > debatable: Solaris 11.3 has reached EOL, it's just that the CPU is too
    > old to be upgraded, so it's not testing a real OS that anyone would
    > actually run PostgreSQL on).  But from some googling[1], I think
    > __sun, __sun__ and sun should all be defined.
    
    My account still works, and what I see on wrasse's host is
    
    tgl@gcc-solaris11:~$ gcc -x c /dev/null -dM -E | grep -i svr
    #define __SVR4 1
    #define __svr4__ 1
    tgl@gcc-solaris11:~$ gcc -x c /dev/null -dM -E | grep -i sun
    #define __sun 1
    #define sun 1
    #define __sun__ 1
    
    I don't know a way to get the list of predefined macros out of the
    compiler wrasse is actually using (/opt/developerstudio12.6/bin/cc),
    but doing some experiments with #ifdef confirmed that it defines
    __sun, __sun__, and __svr4__, but not __svr5__.
    
    			regards, tom lane
    
    
    
    
  5. Re: Dead code in ps_status.c

    Thomas Munro <thomas.munro@gmail.com> — 2023-02-17T02:22:39Z

    On Fri, Feb 17, 2023 at 3:38 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    > My account still works, and what I see on wrasse's host is
    >
    > tgl@gcc-solaris11:~$ gcc -x c /dev/null -dM -E | grep -i svr
    > #define __SVR4 1
    > #define __svr4__ 1
    > tgl@gcc-solaris11:~$ gcc -x c /dev/null -dM -E | grep -i sun
    > #define __sun 1
    > #define sun 1
    > #define __sun__ 1
    >
    > I don't know a way to get the list of predefined macros out of the
    > compiler wrasse is actually using (/opt/developerstudio12.6/bin/cc),
    > but doing some experiments with #ifdef confirmed that it defines
    > __sun, __sun__, and __svr4__, but not __svr5__.
    
    Thanks.  I went with __sun, because a random man page google found me
    for Sun "cc" mentioned that but not __sun__.  Pushed.
    
    http://www.polarhome.com/service/man/?qf=cc&tf=2&of=Solaris&sf=1
    
    
    
    
  6. Re: Dead code in ps_status.c

    Thomas Munro <thomas.munro@gmail.com> — 2023-03-11T03:59:46Z

    On Fri, Feb 17, 2023 at 3:38 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    > Thomas Munro <thomas.munro@gmail.com> writes:
    > > On Thu, Feb 16, 2023 at 6:34 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    > > My GCC compile farm account seems to have expired, or something, so I
    > > couldn't check on wrasse's host (though whether wrasse is "live" is
    > > debatable: Solaris 11.3 has reached EOL, it's just that the CPU is too
    > > old to be upgraded, so it's not testing a real OS that anyone would
    > > actually run PostgreSQL on).  ...
    
    > My account still works, and what I see on wrasse's host is
    
    Just in case it helps someone else who finds themselves locked out of
    that, I noticed that I can still connect from my machine with OpenSSH
    8.8p1, but not from another dev box which was upgraded to OpenSSH
    9.2p1.  For reasons I didn't look into, the latter doesn't like
    exchanging 1s and 0s with "Sun_SSH_2.4" (something Oracle has
    apparently now abandoned in favour of stock OpenSSH, but that machine
    is stuck in time).
    
    
    
    
  7. Re: Dead code in ps_status.c

    Andres Freund <andres@anarazel.de> — 2023-03-11T05:13:54Z

    Hi,
    
    On 2023-03-11 16:59:46 +1300, Thomas Munro wrote:
    > On Fri, Feb 17, 2023 at 3:38 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    > > Thomas Munro <thomas.munro@gmail.com> writes:
    > > > On Thu, Feb 16, 2023 at 6:34 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    > > > My GCC compile farm account seems to have expired, or something, so I
    > > > couldn't check on wrasse's host (though whether wrasse is "live" is
    > > > debatable: Solaris 11.3 has reached EOL, it's just that the CPU is too
    > > > old to be upgraded, so it's not testing a real OS that anyone would
    > > > actually run PostgreSQL on).  ...
    >
    > > My account still works, and what I see on wrasse's host is
    >
    > Just in case it helps someone else who finds themselves locked out of
    > that, I noticed that I can still connect from my machine with OpenSSH
    > 8.8p1, but not from another dev box which was upgraded to OpenSSH
    > 9.2p1.  For reasons I didn't look into, the latter doesn't like
    > exchanging 1s and 0s with "Sun_SSH_2.4" (something Oracle has
    > apparently now abandoned in favour of stock OpenSSH, but that machine
    > is stuck in time).
    
    It's the key types supported by the old ssh. I have the following in my
    ~/.ssh/config to work around that:
    
    Host gcc210.fsffrance.org
        PubkeyAcceptedKeyTypes +ssh-rsa
        KexAlgorithms +diffie-hellman-group1-sha1
    Host gcc211.fsffrance.org
        PubkeyAcceptedKeyTypes +ssh-rsa
    
    Greetings,
    
    Andres Freund
    
    
    
    
  8. Re: Dead code in ps_status.c

    Michael Banck <mbanck@gmx.net> — 2025-08-26T13:55:30Z

    Hi,
    
    On Thu, Feb 16, 2023 at 04:52:33PM +1300, Thomas Munro wrote:
    > Therefore I think it is safe to drop the PS_USE_PS_STRING and
    > PS_USE_CHANGE_ARGV code branches, remove a bunch of outdated comments
    > and macro tests, and prune the defunct configure/meson probe.
    
    I noticed Postgres no longer updates the process title on the Hurd, this
    is because this was removed along other legacy platforms in this commit 
    as it was using PS_USE_PS_STRING.
    
    Just doing the same as what Linux does (PS_USE_CLOBBER_ARGV) works, so
    I've added the __GNU__ definition to it. Process handling on Linux and
    the Hurd are different enough that just changing it to __GLIBC__ would
    not be advisable IMV.
    
    Patch attached.
    
    
    Michael
    
  9. Re: Dead code in ps_status.c

    Michael Banck <mbanck@gmx.net> — 2025-08-26T15:17:28Z

    Hi,
    
    On Tue, Aug 26, 2025 at 03:55:30PM +0200, Michael Banck wrote:
    > On Thu, Feb 16, 2023 at 04:52:33PM +1300, Thomas Munro wrote:
    > > Therefore I think it is safe to drop the PS_USE_PS_STRING and
    > > PS_USE_CHANGE_ARGV code branches, remove a bunch of outdated comments
    > > and macro tests, and prune the defunct configure/meson probe.
    > 
    > I noticed Postgres no longer updates the process title on the Hurd, this
    > is because this was removed along other legacy platforms in this commit 
    > as it was using PS_USE_PS_STRING.
    
    By the way, on the back branches from 13-15 (before the above commit)
    process title changes don't work either, presumably because __hurd__ (as
    opposed to __GNU__ and __gnu_hurd__) has not been defined on GNU/Hurd
    for ages (or ever?), see
    https://github.com/gcc-mirror/gcc/blob/master/gcc/config/gnu.h#L25
    
    So in case this get backpatched, I think it should be changed to
    PS_USE_CLOBBER_ARGV there as well.
    
    
    Michael
    
    
    
    
  10. Re: Dead code in ps_status.c

    Thomas Munro <thomas.munro@gmail.com> — 2025-11-10T22:04:00Z

    Replying to Michael's message:
    
    https://www.postgresql.org/message-id/68adbcd3.500a0220.8d4c9.9460%40mx.google.com
    
    Sorry I missed this.  I had some trouble with your messages being
    deleted as spam, which I've hopefully fixed now...
    
    -#elif defined(__linux__) || defined(__sun) || defined(__darwin__)
    +#elif defined(__linux__) || defined(__sun) || defined(__darwin__) ||
    defined(__GNU__)
    
    Would __gnu_hurd__ be a better bet, less confusable with GNU userspace
    stuff?  I think these platform macros might come from this file in
    GCC:
    
    https://github.com/gcc-mirror/gcc/blob/faf7053346110cbd11fb22ff75f56a964047b19c/gcc/config/gnu.h#L30
    
    But maybe not only there, if __hurd__ (as removed by d2ea2d31)
    actually worked...
    
    
    
    
  11. Re: Dead code in ps_status.c

    Thomas Munro <thomas.munro@gmail.com> — 2025-11-16T23:54:44Z

    On Tue, Nov 11, 2025 at 11:04 AM Thomas Munro <thomas.munro@gmail.com> wrote:
    > https://www.postgresql.org/message-id/68adbcd3.500a0220.8d4c9.9460%40mx.google.com
    >
    > Sorry I missed this.  I had some trouble with your messages being
    > deleted as spam, which I've hopefully fixed now...
    >
    > -#elif defined(__linux__) || defined(__sun) || defined(__darwin__)
    > +#elif defined(__linux__) || defined(__sun) || defined(__darwin__) ||
    > defined(__GNU__)
    >
    > Would __gnu_hurd__ be a better bet, less confusable with GNU userspace
    > stuff?  I think these platform macros might come from this file in
    > GCC:
    >
    > https://github.com/gcc-mirror/gcc/blob/faf7053346110cbd11fb22ff75f56a964047b19c/gcc/config/gnu.h#L30
    >
    > But maybe not only there, if __hurd__ (as removed by d2ea2d31)
    > actually worked...
    
    I failed to locate a definitive source in a manual or porting guide or
    such, but I see patches making the same change in other projects in
    their mailing lists[1], so it seems that  __GNU__ is indeed their
    preferred way of detecting a GNU/Hurd (or IIUC 100% "GNU") system, and
    it's certainly not defined on my Debian GNU/Linux machine according to
    GCC and Clang.  So although it was slightly confusing to this human,
    being used to seeing __GNUC__ and similar, it doesn't appear to be
    confusing to computers.
    
    Pushed, and back-patched to 16, where it applied without problems.
    
    The REL_{14,15}_STABLE branches don't have commit d2ea2d31.  I thought
    about doing s/__hurd__/__GNU__/ instead, but it actually said:
    
    #elif (defined(BSD) || defined(__hurd__)) && !defined(__darwin__)
    #define PS_USE_CHANGE_ARGV
    
    The right thing to do might be to remove it from there, define
    PS_USE_CLOBBER_ARGV like in the newer branches and also apply the
    second hunk about padding strategy (in other words: be exactly like
    GNU/Linux), but I can't test that.  If 14 and 15 are still interesting
    to you, let me know if that makes sense and works as expected,
    otherwise I'll assume you just want to let sleeping dogs lie.
    
    [1] https://lists.gnu.org/archive/cgi-bin/namazu.cgi?query=__GNU__&submit=Search%21&idxname=bug-hurd&max=20&result=normal&sort=score
    
    
    
    
  12. Re: Dead code in ps_status.c

    Michael Banck <mbanck@gmx.net> — 2025-11-17T09:35:59Z

    Hi Thomas,
    
    On Mon, Nov 17, 2025 at 12:54:44PM +1300, Thomas Munro wrote:
    > On Tue, Nov 11, 2025 at 11:04 AM Thomas Munro <thomas.munro@gmail.com> wrote:
    > > https://www.postgresql.org/message-id/68adbcd3.500a0220.8d4c9.9460%40mx.google.com
    > >
    > > Sorry I missed this.  I had some trouble with your messages being
    > > deleted as spam, which I've hopefully fixed now...
    
    (Sorry about that, I think I fixed it now (after Alvaro mentioned it
    again to me at pgconf.eu). Ironically, your previous mail from November
    11 was flagged as spam by my provider so I didn't see it until now,
    either)
    
    > > -#elif defined(__linux__) || defined(__sun) || defined(__darwin__)
    > > +#elif defined(__linux__) || defined(__sun) || defined(__darwin__) ||
    > > defined(__GNU__)
    > >
    > > Would __gnu_hurd__ be a better bet, less confusable with GNU userspace
    > > stuff?  I think these platform macros might come from this file in
    > > GCC:
    > >
    > > https://github.com/gcc-mirror/gcc/blob/faf7053346110cbd11fb22ff75f56a964047b19c/gcc/config/gnu.h#L30
    > >
    > > But maybe not only there, if __hurd__ (as removed by d2ea2d31)
    > > actually worked...
    > 
    > I failed to locate a definitive source in a manual or porting guide or
    > such, but I see patches making the same change in other projects in
    > their mailing lists[1], so it seems that  __GNU__ is indeed their
    > preferred way of detecting a GNU/Hurd (or IIUC 100% "GNU") system, and
    > it's certainly not defined on my Debian GNU/Linux machine according to
    > GCC and Clang. 
    
    Yeah, __GNU__ is the usual way to distinguish that, I didn't even know
    about __gnu_hurd__ until I looked up the same file above when I wrote
    the patch...
    
    > So although it was slightly confusing to this human, being used to
    > seeing __GNUC__ and similar, it doesn't appear to be confusing to
    > computers.
    > 
    > Pushed, and back-patched to 16, where it applied without problems.
    
    Thanks!
    
    > The REL_{14,15}_STABLE branches don't have commit d2ea2d31.  I thought
    > about doing s/__hurd__/__GNU__/ instead, but it actually said:
    > 
    > #elif (defined(BSD) || defined(__hurd__)) && !defined(__darwin__)
    > #define PS_USE_CHANGE_ARGV
    > 
    > The right thing to do might be to remove it from there, define
    > PS_USE_CLOBBER_ARGV like in the newer branches and also apply the
    > second hunk about padding strategy (in other words: be exactly like
    > GNU/Linux), but I can't test that.  If 14 and 15 are still interesting
    > to you, let me know if that makes sense and works as expected,
    > otherwise I'll assume you just want to let sleeping dogs lie.
    
    I mentioned that in a follow-up[0] to my original mail that you
    apparently did not see eiter:
    
    |By the way, on the back branches from 13-15 (before the above commit)
    |process title changes don't work either, presumably because __hurd__ (as
    |opposed to __GNU__ and __gnu_hurd__) has not been defined on GNU/Hurd
    |for ages (or ever?), see
    |https://github.com/gcc-mirror/gcc/blob/master/gcc/config/gnu.h#L25
    |
    |So in case this get backpatched, I think it should be changed to
    |PS_USE_CLOBBER_ARGV there as well.
    
    So yeah, I think those would be useful to fix. If you have a patch, I am
    happy to test it, or I can come up with one (but not sure I manage this
    week).
    
    
    Thanks,
    
    Michael
    
    [0] https://www.postgresql.org/message-id/68add009.170a0220.16b3ca.d01e%40mx.google.com
    
    
    
    
  13. Re: Dead code in ps_status.c

    Thomas Munro <thomas.munro@gmail.com> — 2025-11-17T22:24:40Z

    On Mon, Nov 17, 2025 at 10:36 PM Michael Banck <mbanck@gmx.net> wrote:
    > I mentioned that in a follow-up[0] to my original mail that you
    > apparently did not see eiter:
    >
    > |By the way, on the back branches from 13-15 (before the above commit)
    > |process title changes don't work either, presumably because __hurd__ (as
    > |opposed to __GNU__ and __gnu_hurd__) has not been defined on GNU/Hurd
    > |for ages (or ever?), see
    > |https://github.com/gcc-mirror/gcc/blob/master/gcc/config/gnu.h#L25
    > |
    > |So in case this get backpatched, I think it should be changed to
    > |PS_USE_CLOBBER_ARGV there as well.
    >
    > So yeah, I think those would be useful to fix. If you have a patch, I am
    > happy to test it, or I can come up with one (but not sure I manage this
    > week).
    
    Ahh, yeah, I'd missed that one too.  The mail is definitely getting
    through now, though.
    
    With that information, it seemed pretty clear what to do, so I went
    ahead and back-patched to 14 and 15.