ps_status.h on FreeBSD 4.0 problems and fix - Mailing list pgsql-bugs

From Matthew Altus
Subject ps_status.h on FreeBSD 4.0 problems and fix
Date
Msg-id 39657E6A.49A489E0@senet.com.au
Whole thread Raw
Responses Re: ps_status.h on FreeBSD 4.0 problems and fix  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-bugs
Your name               :       Matthew Altus
Your email address      :    matt@senet.com.au


System Configuration
---------------------
  Architecture : Intel Pentium 3 Dual CPU

  Operating System : FreeBSD 4.0 - STABLE

  PostgreSQL version :   PostgreSQL-6.5.1 (also effects 7.0 as well)

  Compiler used : gcc 2.95.2


Please enter a FULL description of your problem:
------------------------------------------------
The ps output of child postgres process doesn't change to display
hostname etc...  It displays the same as the postmaster.
I noticed there are links (PS_STATUS marco) from the ps_status to the
lockmgr files, which means it may use this to help determine deadlock
status, which is very bad, as freebsd 4.0 doesn't allow you to write the
argv memory, although I might me completely wrong about this one.

If this problem had already been posted to pgsql-bugs, I couldn't tell
as your seach doesn't work.



Please describe a way to repeat the problem.   Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
Install postgres on freeBSD 4.0 and open a connection, type ps axwwwwww
| grep postgres.  all children will look the same as the postmaster.




If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------

Below is my replacement to src/include/utils/ps_status.h , you should
place checks for the setproctitle function in the configure script and
use this if its available (most BSD's) instead of overwriting the argv
memory space.  You will also need to link against libutil (-lutil).


/*-------------------------------------------------------------------------
 *
 * ps_status.h
 *
 *      Defines macros to show backend status on the ps status line.
 *      Unfortunately this is system dpendent.
 *
 *      Below is the FreeBSD version should work FreeBSD 2.2. and
higher.
 *
 *      needs -lutil in makefile/configure script
 *
 *      Written by Matthew Altus
 *

*-------------------------------------------------------------------------
 */

#ifndef PS_STATUS_H
#define PS_STATUS_H


#include <sys/types.h>
#include <libutil.h>

extern char ps_status_buffer[];
extern char ps_status[];

#define BUFFERPATHLEN     255

#define PS_DEFINE_BUFFER \
char ps_status_buffer[BUFFERPATHLEN]; \
char ps_status[BUFFERPATHLEN];

#define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname)
\
        { \
                bzero (ps_status_buffer, BUFFERPATHLEN); \
                bzero (ps_status, BUFFERPATHLEN); \
                sprintf(ps_status_buffer, "%s %s %s %s ", execname,
username, hostname, dbname); \
                setproctitle("%s", ps_status_buffer); \
        }

#define PS_CLEAR_STATUS() \
        { \
                bzero (ps_status, BUFFERPATHLEN); \
                setproctitle("%s", ps_status_buffer); \
        }

#define PS_SET_STATUS(status) \
        { \
                PS_CLEAR_STATUS(); \
                strcpy(ps_status, status); \
                setproctitle("%s%s", ps_status_buffer, ps_status); \
        }

#define PS_STATUS (ps_status)



#endif   /* PS_STATUS_H */



--
_____________________________________________________________________
Matthew Altus  B.Eng. C.S.E.        Sales   : (08) 8221 5221
Software Development Engineer       Support : (08) 8221 5792
SE Network Access Pty Ltd           Fax     : (08) 8221 5220
222 Grote Street                    E-Mail  : matt@senet.com.au
Adelaide  SA  5000                  WWW     : http://www.senet.com.au

pgsql-bugs by date:

Previous
From: "Christopher L. Cousins"
Date:
Subject: Re: upper() problem in 7.0.2
Next
From: "Martin, Sylvain R. (LNG)"
Date:
Subject: bug in index?