]> granicus.if.org Git - postgresql/commitdiff
Improve recording of IA64 stack data.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 9 Jul 2016 19:00:22 +0000 (15:00 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 9 Jul 2016 19:00:22 +0000 (15:00 -0400)
Examination of the results from anole and gharial suggests that we're
only managing to track the size of one of the two stacks of IA64 machines.
Some googling gave the answer: on HPUX11, the register stack is reported
as a page type I don't see in pstat.h on my HPUX10 box.  Let's try
testing for that.

src/backend/storage/ipc/ipc.c

index 1b349e12db0230f69a839707091a1a6d7d150dee..9dda93f0bd6439e1e512feb275596631248c8160 100644 (file)
@@ -94,12 +94,14 @@ report_stack_size(void)
 #if defined(__hpux)
        /* HPUX: examine process's memory map with pstat_getprocvm() */
        int                     targetpid = getpid();
-       struct pst_vm_status buf;
-       int                     res;
        int                     ndx;
 
        for (ndx = 0;; ndx++)
        {
+               struct pst_vm_status buf;
+               const char *pagetype;
+               int                     res;
+
                res = pstat_getprocvm(&buf, sizeof(buf), targetpid, ndx);
                if (res < 0)
                {
@@ -108,13 +110,25 @@ report_stack_size(void)
                }
                if (res != 1)
                        break;
-               if (buf.pst_type != PS_STACK)
-                       continue;
-               fprintf(stderr, "%d: stack addr 0x%lx, length %ld, physical pages %ld\n",
+               switch (buf.pst_type)
+               {
+                       case PS_STACK:
+                               pagetype = "STACK";
+                               break;
+#ifdef PS_RSESTACK
+                       case PS_RSESTACK:
+                               pagetype = "REGSTACK";
+                               break;
+#endif
+                       default:
+                               continue;
+               }
+               fprintf(stderr, "%d: stack addr 0x%lx, length %ld, physical pages %ld, type %s\n",
                                targetpid,
                                buf.pst_vaddr,
                                buf.pst_length,
-                               buf.pst_phys_pages);
+                               buf.pst_phys_pages,
+                               pagetype);
        }
 #else                                                  /* non HPUX */
        /* Otherwise: try to use pmap.  No error if that doesn't work. */