OSDN Git Service

Further fixes for per-tablespace options patch.
authorRobert Haas <rhaas@postgresql.org>
Thu, 7 Jan 2010 03:53:08 +0000 (03:53 +0000)
committerRobert Haas <rhaas@postgresql.org>
Thu, 7 Jan 2010 03:53:08 +0000 (03:53 +0000)
Add missing varlena header to TableSpaceOpts structure.  And, per
Tom Lane, instead of calling tablespace_reloptions in CacheMemoryContext,
call it in the caller's memory context and copy the value over
afterwards, to reduce the chances of a session-lifetime memory leak.

src/backend/utils/cache/spccache.c
src/include/commands/tablespace.h

index 1652615..6f28da3 100644 (file)
@@ -12,7 +12,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/cache/spccache.c,v 1.3 2010/01/06 23:00:02 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/cache/spccache.c,v 1.4 2010/01/07 03:53:08 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -142,7 +142,6 @@ get_tablespace(Oid spcid)
        {
                Datum   datum;
                bool    isNull;
-               MemoryContext octx;
 
                datum = SysCacheGetAttr(TABLESPACEOID,
                                                                tp,
@@ -152,10 +151,9 @@ get_tablespace(Oid spcid)
                        opts = NULL;
                else
                {
-                       /* XXX should NOT do the parsing work in CacheMemoryContext */
-                       octx = MemoryContextSwitchTo(CacheMemoryContext);
-                       opts = (TableSpaceOpts *) tablespace_reloptions(datum, false);
-                       MemoryContextSwitchTo(octx);
+                       bytea *bytea_opts = tablespace_reloptions(datum, false);
+                       opts = MemoryContextAlloc(CacheMemoryContext, VARSIZE(bytea_opts));
+                       memcpy(opts, bytea_opts, VARSIZE(bytea_opts));
                }
                ReleaseSysCache(tp);
        }
index 9330a1f..3d46eeb 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/commands/tablespace.h,v 1.22 2010/01/05 21:53:59 rhaas Exp $
+ * $PostgreSQL: pgsql/src/include/commands/tablespace.h,v 1.23 2010/01/07 03:53:08 rhaas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,6 +34,7 @@ typedef struct xl_tblspc_drop_rec
 
 typedef struct TableSpaceOpts
 {
+       int32           vl_len_;                /* varlena header (do not touch directly!) */
        float8          random_page_cost;
        float8          seq_page_cost;
 } TableSpaceOpts;