From 1c160291ef61f46800616cb88d5a3a02156de4e3 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Sat, 7 Oct 2006 16:43:28 +0000 Subject: [PATCH] Adjust HINT for stack depth limit to mention checking the underlying platform limit, rather than just blindly raising max_stack_depth. Also, tweak the code to work properly if someone sets max_stack_depth to more than 2Gb, which guc.c will allow on a 64-bit machine. --- src/backend/tcop/postgres.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 835b5ab36ea..9145904b49a 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.510 2006/10/04 00:29:58 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.511 2006/10/07 16:43:28 tgl Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -91,7 +91,7 @@ int PostAuthDelay = 0; */ /* max_stack_depth converted to bytes for speed of checking */ -static int max_stack_depth_bytes = 2048 * 1024; +static long max_stack_depth_bytes = 2048 * 1024L; /* * Stack base pointer -- initialized by PostgresMain. This is not static @@ -2498,16 +2498,12 @@ void check_stack_depth(void) { char stack_top_loc; - int stack_depth; + long stack_depth; /* * Compute distance from PostgresMain's local variables to my own - * - * Note: in theory stack_depth should be ptrdiff_t or some such, but since - * the whole point of this code is to bound the value to something much - * less than integer-sized, int should work fine. */ - stack_depth = (int) (stack_base_ptr - &stack_top_loc); + stack_depth = (long) (stack_base_ptr - &stack_top_loc); /* * Take abs value, since stacks grow up on some machines, down on others @@ -2529,7 +2525,8 @@ check_stack_depth(void) ereport(ERROR, (errcode(ERRCODE_STATEMENT_TOO_COMPLEX), errmsg("stack depth limit exceeded"), - errhint("Increase the configuration parameter \"max_stack_depth\"."))); + errhint("Increase the configuration parameter \"max_stack_depth\", " + "after ensuring the platform's stack depth limit is adequate."))); } } @@ -2539,7 +2536,7 @@ assign_max_stack_depth(int newval, bool doit, GucSource source) { /* Range check was already handled by guc.c */ if (doit) - max_stack_depth_bytes = newval * 1024; + max_stack_depth_bytes = newval * 1024L; return true; } -- GitLab